【问题标题】:Plot multiple moving average on multiple data-set in one graph在一张图中绘制多个数据集的多个移动平均值
【发布时间】:2013-07-14 04:10:07
【问题描述】:

我有一个数据框,它由 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)

不知道我错过了什么?有什么建议吗?

【问题讨论】:

    标签: r ggplot2 zoo


    【解决方案1】:

    第一个问题 - 在zoo() 函数中timeA 应该以相反的顺序放置。

    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()
    

    【讨论】:

    • 谢谢你,完美。我想知道如果我只想绘制移动平均结果,我如何只指定 df$A 和 df$B VS Time。
    • 一种方法是在 ggplot() 调用中使用 subset() 例如 ggplot(data=subset(df.long,variable %in% c("A.av","B.av" )),aes(......
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    相关资源
    最近更新 更多