将ggplot转换为plotly - 不同颜色的一行

时间:2017-04-14 10:36:11

标签: r plot ggplot2 plotly

我希望绘制一条曲线,其中一行以不同的颜色绘制,如下例所示:

test_data <-
    data.frame(
        var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
        var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
        date = seq(as.Date("2002-01-01"), by="1 month", length.out=100)
    )

plot <- ggplot(test_data, aes(x = date)) + 
    geom_line(aes(y = var0, group = 1, colour = c(rep(c("a", "b"), each = 25), rep("a", 50)))) + 
    geom_line(aes(y = var1, colour = "var1"))
plot

enter image description here

我在R中的情节或其他交互式库中有什么相同的情节(这样当在某个特定的线/点上移动鼠标时,可以显示带有一些数据的标签)。当我使用ggplotly时,我会得到类似的内容

library(plotly)
ggplotly(plot)

enter image description here

你知道如何在一行中组合红线和绿线(在ggplot中通过group=1参数完成)?

1 个答案:

答案 0 :(得分:2)

问题出现了,因为没有数据,因为&#34; a&#34;对于26:50行(2004年和2005年左右)的小组作业。当ggplot强制连接第25行和第51行的点时,该行会跳转,它出现在ggplotly中。

这是我对长篇数据的尝试:

t2 <- test_data[26:50, ]
t2$gp <- "b"
test_data$gp <- "a"

df <- rbind(test_data, t2)
df <- gather(df, var, value, -date,  - gp)

plot <- ggplot() +
  geom_line(data=df %>% filter(var=="var0"), aes(x=date, y=value, colour=gp)) +
  geom_line(data=df %>% filter(var=="var1"), aes(x=date, y=value, colour=var))

enter image description here

ggplotly(plot)

enter image description here