如何不用R表示时间序列中的差距

时间:2014-02-03 14:00:49

标签: r ggplot2 time-series

我有一些时间序列数据有差距。

df<-read.table(header=T,sep=";", text="Date;x1;x2
2014-01-10;2;5
2014-01-11;4;7
2014-01-20;8;9
2014-01-21;10;15
")
df$Date <- strptime(df$Date,"%Y-%m-%d")
df.long <- melt(df,id="Date")
ggplot(df.long, aes(x = Date, y = value, fill = variable, order=desc(variable))) +   
  geom_area(position = 'stack') 

现在ggplot填写了缺少的日期(12日,13日,......)。我想要的只是ggplot不插入缺少的日期,只是绘制可用的数据。我已经尝试用缺省日期的合并填充NA,这导致删除行的错误消息。

这可能吗?感谢。

1 个答案:

答案 0 :(得分:2)

您可以在数据框中添加一个额外的变量group,以指示两个日期之间的差异是否不等于一天:

df.long$group <- c(0, cumsum(diff(df.long$Date) != 1))

ggplot(df.long, aes(x = Date, y = value, fill = variable, 
                    order=desc(variable))) +
  geom_area(position = 'stack', aes(group = group)) 

enter image description here


更新

为了消除组之间的空间,我建议使用facetting:

library(plyr)
df.long2 <- ddply(df.long, .(variable), mutate, 
                  group = c(0, cumsum(diff(Date) > 1)))

ggplot(df.long2, aes(x = Date, y = value, fill = variable, 
                     order=desc(variable)))  +
  geom_area(position = 'stack',) +
  facet_wrap( ~ group, scales = "free_x")

enter image description here