Ggplot2パッケージに時系列のプロットがあり、移動平均を実行しました。移動平均の結果を時系列のプロットに追加したいと思います。
データセットのサンプル(p31):
ambtemp dt
-1.14 2007-09-29 00:01:57
-1.12 2007-09-29 00:03:57
-1.33 2007-09-29 00:05:57
-1.44 2007-09-29 00:07:57
-1.54 2007-09-29 00:09:57
-1.29 2007-09-29 00: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 = bですが、移動平均データにはタイムスタンプではなく平均列のみが含まれ、これら2つを合わせると不整合が生じる可能性があります。
1つの解決策は、ライブラリZoo
のrollmean()
関数を使用して移動平均を計算することです。
質問のデータフレーム名(p31とp29)には混乱があるため、p 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")
_