Горизонтальная/вертикальная линия

Я использую пакет plotly, и я пытаюсь добавить горизонтальную линию к графику. Есть ли способ сделать это с помощью plotly?

Это можно сделать с помощью ggplot2 и ggplotly, как показано ниже:

library(plotly)

p <- ggplot() +
  geom_hline(yintercept = 4) +
  xlim(c(0,10)) +
  ylim(c(0,10))

ggplotly(p)

Но я не могу добавить это к существующему сюжетному сюжету.

Кроме того, ось моих диаграмм не фиксирована, поэтому было бы сложно (но не невозможно) просто разработать систему координат x и y для горизонтальной линии, но я бы просто добавил ее автоматически.

Я просмотрел аргументы y0 и dy, но, похоже, я не могу получить код для тех, кто работает. Я не совсем уверен, что они делают точно, но я думаю, что они, может быть, меня ищут? Я не могу найти хорошие примеры их использования.

Ответ 1

Есть два основных способа сделать это (используя данные или "бумажные" координаты). Предполагая координаты данных, самый простой способ - через add_segments():

plot_ly() %>%
  add_segments(x = 4, xend = 4, y = 0, yend = 10) %>%
  add_segments(x = 3, xend = 5, y = 5, yend = 5)

enter image description here

Обратите внимание, как мы жестко закодировали экстент этих линий в координатах данных; поэтому при масштабировании и панорамировании графика линия будет "обрезана" при этих значениях. Если вы не хотите, чтобы эти линии были обрезаны, используйте форму линии с xref/yref, установленным на бумагу (это помещает область графика в масштаб 0-1, а не в данные x/y). шкала):

vline <- function(x = 0, color = "red") {
  list(
    type = "line", 
    y0 = 0, 
    y1 = 1, 
    yref = "paper",
    x0 = x, 
    x1 = x, 
    line = list(color = color)
  )
}

hline <- function(y = 0, color = "blue") {
  list(
    type = "line", 
    x0 = 0, 
    x1 = 1, 
    xref = "paper",
    y0 = y, 
    y1 = y, 
    line = list(color = color)
  )
}

plot_ly() %>%
  layout(shapes = list(vline(4), hline(5)))

enter image description here

Ответ 2

В качестве альтернативы вы можете добавить форму (например, строку) в layout(). В следующем примере добавлена ​​вертикальная линия:

p <- plot_ly(data, x = ~x.data, y = ~y.data, text = ~text.data, type = 'scatter', 
       mode = 'markers', marker = list(size = ~size.data, opacity= 0.5)) %>%
     layout(shapes=list(type='line', x0= 0.2, x1= 0.2, y0=min(allyvalues), y1=max(allyvalues), line=list(dash='dot', width=1)),
       title = 'This is the Title',
       xaxis = list(title = "X-Axis", showgrid = TRUE),
       yaxis = list(title = "Y-Axis", showgrid = TRUE))
p