如何在R Plotly中用颜色矢量绘制一条线

时间:2017-09-11 00:18:21

标签: r ggplot2 plotly ggplotly

说我有以下数据框:

ret <- rnorm(100, 0, 5)
df <- data.frame(
  x = seq(1, 100, 1),
  ret = ret,
  y = 100 + cumsum(ret),
  col = c(ifelse(ret > 0, "red", "forestgreen"), NA)[-1]
)

在这里,我使用名为&#39; ret&#39;的rnorm来模拟某些虚构金融资产的回报,并定义了一个名为&#39; col&#39;的颜色向量。 upticks是绿色的,而downticks是红色的。

我想要制作的内容如下:

library(ggplot2)
ggplot(df, aes(x=x, y=y)) + geom_line(aes(colour=col, group=1)) 

enter image description here

但是我想用剧情制作一个类似的图像,以便我可以放大图的部分。我的第一个想法是尝试在生成所需图像的代码周围简单地使用ggplotly()函数:

library(plotly)
ggplotly(ggplot(df, aes(x=x, y=y)) + geom_line(aes(colour=col, group=1)))

Using ggplotly

但情节不再分组。另外,我尝试使用plot_ly(),但似乎不能使线段根据&#39; col&#39;我指定的属性:

plot_ly(data=df, x = ~x) %>% add_lines(y = ~y, line = list(color=~col))

enter image description here

但我的颜色参数不会影响线条的颜色。我已经尝试了其他各种各样的事情,但最终还是得到了两个不受欢迎的情节中的一个。任何帮助将不胜感激!

注意:我已经使用plot_ly()创建了烛台和OHLC图表,但是我无法使用它们,因为当您放大到子轴的y轴时,y轴不会缩放。曲线图。

1 个答案:

答案 0 :(得分:3)

我可以使用ggplotlygeom_segment获得所需的行为,并使每个细分链接到下一个(x, y)值,无论颜色如何:

library(dplyr)
df = df %>%
    arrange(x) %>%
    mutate(x_next = lead(x), y_next = lead(y))

p = ggplot(df, aes(x=x, y=y)) + 
    geom_segment(aes(xend = x_next, yend = y_next, colour=col))
ggplotly(p)

那就是说,我没有一个很好的答案,为什么ggplotly首先没有产生所需的输出。