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

Posted

技术标签:

【中文标题】如何在 R Plotly 中用颜色向量绘制一条线【英文标题】:How to plot a line with color vector in R Plotly 【发布时间】:2018-02-19 03:58:00 【问题描述】:

假设我有以下数据框:

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]
)

在这里,我使用名为“ret”的 rnorm 模拟一些虚构金融资产的回报,并定义了一个名为“col”的颜色向量,其中上升为绿色,下降为红色。

我想要制作的内容如下:

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

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

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

但情节不再分组。此外,我尝试使用 plot_ly() 但似乎无法根据我指定的“col”属性使线段获得颜色:

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

但我的颜色参数不会影响线条的颜色。我尝试了其他各种方法,但最终还是以两个不受欢迎的情节之一结束。任何帮助将不胜感激!

注意:我已经使用 plot_ly() 制作了烛台和 OHLC 图表,但我无法使用它们,因为当您放大绘图的某个子部分时 y 轴不会缩放。

【问题讨论】:

【参考方案1】:

通过使用geom_segment 并使每个段链接到下一个(x, y) 值,无论颜色如何,我都能从ggplotly 获得所需的行为:

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 首先没有产生所需的输出,我没有很好的答案。

【讨论】:

以上是关于如何在 R Plotly 中用颜色向量绘制一条线的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 plotly.graph_objects 绘制 3D 线?

如何使用线性感知器中的权重向量绘制一条线? [关闭]

Plotly R中的可移动线

如何修复此绘图程序,以便在选择另一个像素时,从一条线绘制的最后一个像素不会变为不同的颜色?

如何在python中绘制一条线,每个数据点都有一个间隔

绘制和跟踪相同颜色的因子 plotly R