我在包GGPLOT2时间序列的情节,我已经进行移动平均,我想补充的移动平均时间序列的阴谋的结果。
数据集(P31)的样品:
ambtemp DT
-1.14 2007-09-29 0点01分57秒
-1.12 2007-09-29 0时03分57秒
-1.33 2007-09-29○点05分57秒
-1.44 2007-09-29 0时07分57秒
-1.54 2007-09-29 0时09分57秒
-1.29 2007-09-29 0时11分57秒
时间序列演示应用的代码:
Require(ggplot2)
library(scales)
p29$dt=strptime(p31$dt, "%Y-%m-%d %H:%M:%S")
ggplot(p29, aes(dt, ambtemp)) + geom_line() +
scale_x_datetime(breaks = date_breaks("2 hour"),labels=date_format("%H:%M")) + xlab("Time 00.00 ~ 24:00 (2007-09-29)") + ylab("Tempreture")+
opts(title = ("Node 29"))
时间序列演示的样品
移动平均积样本 预期结果的样品
的挑战是,时间序列数据OV =从数据集,其包括时间戳和温度,但移动平均数据btained仅包括平均柱而不是时间戳和配合这两个可导致不一致。
一个解决方案是使用rollmean()
函数从文库zoo
来计算移动平均值。
有一些混乱与你的问题(P31 P29和)数据帧的名字,所以我会用第29页。
p29$dt=strptime(p29$dt, "%Y-%m-%d %H:%M:%S")
library(zoo)
#Make zoo object of data
temp.zoo<-zoo(p29$ambtemp,p29$dt)
#Calculate moving average with window 3 and make first and last value as NA (to ensure identical length of vectors)
m.av<-rollmean(temp.zoo, 3,fill = list(NA, NULL, NA))
#Add calculated moving averages to existing data frame
p29$amb.av=coredata(m.av)
#Add additional line for moving average in red
ggplot(p29, aes(dt, ambtemp)) + geom_line() +
geom_line(aes(dt,amb.av),color="red") +
scale_x_datetime(breaks = date_breaks("5 min"),labels=date_format("%H:%M")) +
xlab("Time 00.00 ~ 24:00 (2007-09-29)") + ylab("Tempreture")+
ggtitle("Node 29")
如果线的颜色应该出现在图例,然后aes()
在ggplot()
和geom_line()
必须被修改和scale_colour_manual()
应增加。
ggplot(p29, aes(dt)) + geom_line(aes(y=ambtemp,colour="real")) +
geom_line(aes(y=amb.av,colour="moving"))+
scale_x_datetime(breaks = date_breaks("5 min"),labels=date_format("%H:%M")) +
xlab("Time 00.00 ~ 24:00 (2007-09-29)") + ylab("Tempreture")+
scale_colour_manual("Lines", values=c("real"="black", "moving"="red")) +
ggtitle("Node 29")