R geom_面积图中的叠加曲线

R geom_面积图中的叠加曲线,r,ggplot2,R,Ggplot2,如何在下面的示例中堆叠图形 a<-as.POSIXlt("2013-07-01 00:00:00",origin = "1960-01-01",tz="GMT") b<-as.POSIXlt("2013-07-08 00:00:00",origin = "1960-01-01",tz="GMT") woche1<-sample(seq(as.numeric(a),by=60*60,length.out=200),200,T) woche2<-sample(seq(as.n

如何在下面的示例中堆叠图形

a<-as.POSIXlt("2013-07-01 00:00:00",origin = "1960-01-01",tz="GMT")
b<-as.POSIXlt("2013-07-08 00:00:00",origin = "1960-01-01",tz="GMT")
woche1<-sample(seq(as.numeric(a),by=60*60,length.out=200),200,T)
woche2<-sample(seq(as.numeric(b),by=60*60,length.out=200),200,T)
times<-c(woche1,woche2)
class(times)<-c("POSIXt","POSIXct") 
times<-as.POSIXlt(times,origin = "1960-01-01",tz="GMT")
key<-sample(LETTERS[1:3],200,T)
df<-data.frame(times=times,order=factor(rep(1:2,each=100)), key=key)
p<-ggplot(df, aes(x=times))
p<-p + geom_area(aes(y = ..count.., fill = key, group = key),stat = "bin",position = 'stack')#,position = 'stack'
p<-p + facet_wrap( ~ order,scales="free_x")
p

a确实有点不清楚,但我认为您希望图形相互重叠,而不是相邻。为此,只需将
nrow=2
添加到镶嵌面


p正如您在评论中链接的问题中已经提到的,问题是在您的数据中,每个
键的
时间不同,因此它们不能堆叠

要解决此问题,您必须为所有
值设置相等的时间序列。例如,由12小时时间段组成的
tim.seq

tim.seq<-seq(as.POSIXlt("2013-07-01 00:00:00",origin = "1960-01-01",tz="GMT"),
             as.POSIXlt("2013-07-16 12:00:00",origin = "1960-01-01",tz="GMT"),by="12 hours")
然后使用库
plyr
中的函数
ddply()。Add times2应作为POSIXct类进行打印

df2<-ddply(df,.(order,times2,key),nrow)
df2$times2<-as.POSIXct(df2$times2)
现在可以得到叠加面积图

ggplot(df4,aes(x=times2,y=V1,fill=key))+geom_area(stat="identity")+
  facet_wrap( ~ order,scales="free_x")

如果你把问题说得更清楚一点,你可能会得到更多/更快/更好的帮助……具体地说,我认为你需要详细说明你所说的“堆栈”是什么意思。我也有同样的问题,比如有其他解决方案吗?正如你在评论中链接的问题中所提到的,问题是,在您的数据中,每个关键点的时间都不同,所以它们不能堆叠。是的,我知道,但我正在寻找一种解决方案,以使时间间隔更灵活,我如何才能做到这一点,例如,对于所有3h?thx,是否有一个函数可以在一个命令中按时间对data.frame df2进行排序?我看到你重新订购了df2,因为它不能很好地打印df2。@Klaus我不确定我是否理解你。df2按顺序变量和time2变量排序。如果你把ddply(df,.(order,times2,key),nrow)改为ddply(df,.(times2,order,key),nrow),那么它将按times2排序,然后按orders排序。现在我知道你在df3和df4中做了什么了。在df2中还有一些时间项。我真的很喜欢这个解决方案,并学习应用基本的函数cut和merge,我想这对我以后会有很大帮助。
df3<-expand.grid(unique(df2$order),unique(df2$times2),unique(df2$key))
colnames(df3)<-c("order","times2","key")
df4<-merge(df2,df3,by=c("times2","order","key"),all=TRUE)
df4$V1[is.na(df4$V1)]<-0
ggplot(df4,aes(x=times2,y=V1,fill=key))+geom_area(stat="identity")+
  facet_wrap( ~ order,scales="free_x")