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

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

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

我想要生成如下内容:

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

enter image description here

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

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

Using ggplotly

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

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

enter image description here

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

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

最佳答案

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

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 - 如何在 R Plotly 中用颜色向量绘制一条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46146720/

相关文章:

javascript - 将绘图中的数据保存到 csv 或 excel 文件中

r - 将极坐标直方图与极坐标散点图相结合

python - 从 r 过渡到 Python - pandas 中类似 dplyr 的操作

r - 带背景阴影的 ggplot2 时间序列图

r - ggplot没有绘制正确的颜色

python - 使用滑动日期栏对 Plotly map 进行动画处理

plotly - 如何制作将年份映射到线条颜色并在 x 轴上映射月份的 Plotly 图表

r - 如何为这些回归建立一个循环?

r - 构建小插图时安装包失败((..)/doc/index.html 丢失)

r - ggplot2 中具有可变大小 binwidth 的直方图