将色阶渐变与转换为ggplotly的ggplot一起使用

getting colour scale gradient to work with ggplot converted to ggplotly

我无法使用 ggplot 对象在 plotly 中正确绘制颜色美学线。我错过了什么?

library(ggplot2)
library(plotly)



df <- data.frame(val = as.numeric(LakeHuron), idx = 1:length(LakeHuron))


p <- ggplot(df, aes(x = idx, y = val, colour = val)) + geom_line()
p <- p + scale_color_gradient2(low="red", mid = "gold", high="green", midpoint = mean(df$val))

p


p2 <- ggplotly(p)
p2

p 打印正确的预期输出。

当我打印 plotly 对象时 p2,我没有得到正确连接的线点?

问题是当我添加我认为的审美色彩时。

版本: plotly 4.9,ggplot2 3.1.1

这是由于 plotly 与 ggplot 的工作方式存在限制/差异。看起来在线迹上有一个 open issue here updated August 2018 suggesting it's not possible within the same structure ggplot uses -- a single series in plotly can't currently have varying color. ("We don't allow per-segment coloring")

但不要害怕!我们可以使用 geom_segment 将线的每个部分指定为单独的线段,以稍微不同的方式构建绘图。这个结构是每个段的一个单独的对象,并将转换为 plotly fine:

df <- data.frame(val = as.numeric(LakeHuron), idx = 1:length(LakeHuron))
p_seg <- ggplot(df, aes(x = idx, y = val, 
                    xend = lead(idx), yend = lead(val), 
                    colour = val)) + 
  geom_segment()
p_seg <- p_seg + scale_color_gradient2(low="red", mid = "gold", high="green", midpoint = mean(df$val))
p_seg

p2 <- ggplotly(p_seg)