将色阶渐变与转换为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)
我无法使用 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)