![](/img/trans.png)
[英]Sharing axes and legends between subplots in plotly in R (faceting in ggplot2 and using ggplotly doesn't work)
[英]Different behavior between ggplot2 and plotly using ggplotly
我想打一个折线图中plotly
,使其不会对整个长度相同的颜色。 颜色以连续刻度给出。 这是很容易在ggplot2
但是当我把它翻译成plotly
使用ggplotly
函数变量决定像分类变量色彩的行为。
require(dplyr)
require(ggplot2)
require(plotly)
df <- data_frame(
x = 1:15,
group = rep(c(1,2,1), each = 5),
y = 1:15 + group
)
gg <- ggplot(df) +
aes(x, y, col = group) +
geom_line()
gg # ggplot2
ggplotly(gg) # plotly
另一方面,我发现一个变通办法在ggplot2
表现ggplot2
。
df2 <- df %>%
tidyr::crossing(col = unique(.$group)) %>%
mutate(y = ifelse(group == col, y, NA)) %>%
arrange(col)
gg2 <- ggplot(df2) +
aes(x, y, col = col) +
geom_line()
gg2
ggplotly(gg2)
我也没有找到一种方法直接在密谋。 也许根本没有解决方案。 有任何想法吗?
看起来ggplotly将group
视为一个因素,即使它是数字。 您可以使用geom_segment
作为解决方法,以确保在每对点之间绘制线段:
gg2 = ggplot(df, aes(x,y,colour=group)) +
geom_segment(aes(x=x, xend=lead(x), y=y, yend=lead(y)))
gg2
ggplotly(gg2)
关于@rawr(已删除)的注释,如果您要将线色映射到连续变量,我认为让group
连续是有意义的。 以下是OP示例的扩展,它是一个连续的group
列,而不是只有两个离散的类别。
set.seed(49)
df3 <- data_frame(
x = 1:50,
group = cumsum(rnorm(50)),
y = 1:50 + group
)
下面的图gg3
使用geom_line
,但我也包含了geom_point
。 您可以看到ggplotly
正在绘制点。 但是,没有行,因为没有两个点的group
值相同。 如果我们未包含geom_point
,则该图将为空白。
gg3 <- ggplot(df3, aes(x, y, colour = group)) +
geom_point() + geom_line() +
scale_colour_gradient2(low="red",mid="yellow",high="blue")
gg3
ggplotly(gg3)
切换到geom_segment
给我们,我们想用线ggplotly
。 但是请注意,该行颜色将立足于价值group
在该段的第一个点(无论使用geom_line
或geom_segment
),所以要插值的值有可能是案件group
的每个(x之间,y在)以获取更平滑的颜色渐变:
gg4 <- ggplot(df3, aes(x, y, colour = group)) +
geom_segment(aes(x=x, xend=lead(x), y=y, yend=lead(y))) +
scale_colour_gradient2(low="red",mid="yellow",high="blue")
ggplotly(gg4)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.