如何在R中不绘制时间序列中的间隙

3
我有一些带有间隔的时间序列数据。
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 <- reshape::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不要插值缺失的日期,只绘制可用的数据。我尝试使用merge将缺失的日期填充为NA,但结果却出现了删除行的错误信息。
这个有可能实现吗?谢谢。
1个回答

4
您可以在数据框中添加一个额外的变量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


谢谢!我能告诉ggplot将x轴从第11到20个点“折叠”吗?这样就是一个连续的图形了吗? - KingOfCoders
非常感谢您的工作,我会看看这是否适用于我(每个周末都是一个机会)。 - KingOfCoders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接