Горизонтальная/вертикальная линия
Я использую пакет 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