我有一些时间序列数据有差距。
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,这导致删除行的错误消息。
这可能吗?感谢。
答案 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))
更新:
为了消除组之间的空间,我建议使用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")