我有一个数据框,由3列组成:时间,A,B。我设法在一个图中绘制(A和B)VS时间。我想计算A,B的移动平均值并将其绘制在同一图表上。我找到了类似的question,但它是针对单个数据的。我已经按照相同的步骤进行了操作,但我无法将A和B的移动平均值组合在同一图表上,以使其成为多个。
我的数据框示例:
time,A,B
0.122096,1,0
0.207928,9,0
0.300415,17,30
0.400383,30,60
0.503295,26,50
0.606207,24,70
1.05641,7,50
1.066232,1,56
1.068054,1,60
1.072752,1,76
1.107066,5,30
1.209493,16,40
1.301466,33,50
我的代码:
require(reshape2)
require(ggplot2)
library(zoo)
df<-read.csv("DATA.csv")
temp.zoo<-zoo(df$time,df$A)
temp2.zoo<-zoo(df$time,df$B)
m.av<-rollmean(temp.zoo,10)
df$A.av=coredata(m.av)
m2.av<-rollmean(temp2.zoo,10)
df$B.av=coredata(m2.av)
p<-ggplot(dat = melt(df, id.var="time"), aes(x=time, y=value, color = variable)) +
geom_line(size=0.6) +
// the above line is graphing the two columns(A and B ) VS time .
geom_line(aes(x=df$time,y=df$A.av),color="black") +
geom_line(aes(x=df$time,y=df$B.av),color="grey")
print(p)
不知道我错过了什么?有什么建议吗?
答案 0 :(得分:0)
第一个问题 - zoo()
函数time
和A
应按相反顺序排列。
temp.zoo<-zoo(df$A,df$time)
temp2.zoo<-zoo(df$B,df$time)
接下来,对于rollmean()
函数,您应该添加参数fill=list(NA,NULL,NA)
以填充开始和结束NA值以获得与原始数据相同的长度向量。
m.av<-rollmean(temp.zoo,10,fill=list(NA,NULL,NA))
df$A.av=coredata(m.av)
m2.av<-rollmean(temp2.zoo,10,fill=list(NA,NULL,NA))
df$B.av=coredata(m2.av)
现在您可以在绘图之前融化原始数据框。因此,对于绘图,您只需要一次geom_line()
次呼叫。
df.long<-melt(df, id.vars="time")
ggplot(data=df.long, aes(time,value,color=variable))+geom_line()