繁体   English   中英

ggplot2和ggplotly之间的行为不同

[英]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表现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_linegeom_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM