绘制有间隙的多条线(不完整的时间序列)
Plotting multiple lines with a gap (incomplete timeseries)
我有一个不完整的时间序列,这意味着观察中存在很大差距:
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")
我想使用 ggplot2
绘制 dat
,但在 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))
但这只是综合了所有要点:
我的问题和Line break when no data in ggplot2的区别在于我有多行,这显然禁止在我的geom_line(aes(...))
调用中使用group=time
。
然后我尝试将分面作为次优解决方案:
ggplot(data=dat, aes(x=date, y=value, group=variable)) +
geom_line() + geom_point() + facet_grid( ~ time)
但是即使没有观察结果,这也会沿 x 轴绘制整个比例:
您可以使用一个新变量来分组等于变量+时间(即四组: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()
我有一个不完整的时间序列,这意味着观察中存在很大差距:
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")
我想使用 ggplot2
绘制 dat
,但在 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))
但这只是综合了所有要点:
我的问题和Line break when no data in ggplot2的区别在于我有多行,这显然禁止在我的geom_line(aes(...))
调用中使用group=time
。
然后我尝试将分面作为次优解决方案:
ggplot(data=dat, aes(x=date, y=value, group=variable)) +
geom_line() + geom_point() + facet_grid( ~ time)
但是即使没有观察结果,这也会沿 x 轴绘制整个比例:
您可以使用一个新变量来分组等于变量+时间(即四组: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()