用间隙绘制多条线(不完整的时间序列)

时间:2015-08-21 19:35:33

标签: r ggplot2 linechart timeserieschart

我的时间序列不完整,意味着观察结果存在很大差距:

dat <- data.frame(
  date = c(2000, 2001, 2002, 2009, 2010, 2011),
  value1 = runif(6,1,100),
  value2 = runif(6,1,100)
)
library("reshape2")
dat_long <- melt(dat, id="date")
dat_long$time <- ifelse(dat_long$date < 2009, "early", "late")

我想使用dat绘制ggplot2,但2002年和2009年的观察结果之间存在差距。实际上,应该有两组线:一组用于2000年,2001年和2002年,以及另一个是2009年,2010年和2011年(因此按time分组)。

根据Line break when no data in ggplot2,我试过了

library("ggplot2")
ggplot(data=dat_long, aes(x=date, y=value, group=variable)) +
  geom_line(aes(color=variable, group=time)) +
  geom_point(aes(color=variable))

但这简单地结合了所有要点:

All points combined

我的问题与Line break when no data in ggplot2之间的区别在于我有多行,这显然禁止在group=time来电中使用geom_line(aes(...))

然后我尝试将facets作为第二好的解决方案:

ggplot(data=dat, aes(x=date, y=value, group=variable)) +
  geom_line() + geom_point() + facet_grid( ~ time)

但即使没有观察结果,这也会沿着x轴绘制整个比例: Facet

1 个答案:

答案 0 :(得分:1)

您可以使用新变量进行分组,等于变量+时间(即四组:value1-early,value1-late,value2-early,value2-late)

dat_long$gr <- with(dat_long,paste0(variable,time))

ggplot(data=dat_long, aes(x=date, y=value, group=gr,color=variable)) +
  geom_line() +
  geom_point()

enter image description here