使用R组合时间序列图

时间:2013-02-04 17:26:52

标签: time-series

我想在一张图上合并三个图形。 R里面的数据是“nottem”。有人可以帮我编写代码,通过使用不同的颜色将季节性均值和谐波(余弦模型)及其时间序列绘制在一起吗?我已经编写了模型代码,只是不知道如何将它们组合在一起进行比较。

Code :library(TSA)
  nottem
  month.=season(nottem)
  model=lm(nottem~month.-1)
  summary(nottem)
  har.=harmonic(nottem,1)
  model1=lm(nottem~har.)
  summary(model1)
plot(nottem,type="l",ylab="Average monthly temperature at Nottingham castle") 
points(y=nottem,x=time(nottem), pch=as.vector(season(nottem)))

2 个答案:

答案 0 :(得分:1)

只需将时间序列放在矩阵中:

x = cbind(serie1 = ts(cumsum(rnorm(100)), freq = 12, start = c(2013, 2)),
serie2 = ts(cumsum(rnorm(100)), freq = 12, start = c(2013, 2)))

plot(x)

或配置绘图区域:

par(mfrow = c(2, 1)) # 2 rows, 1 column
serie1 = ts(cumsum(rnorm(100)), freq = 12, start = c(2013, 2))
serie2 = ts(cumsum(rnorm(100)), freq = 12, start = c(2013, 2))

require(zoo) 
plot(serie1)
lines(rollapply(serie1, width = 10, FUN = mean), col = 'red')
plot(serie2)
lines(rollapply(serie2, width = 10, FUN = mean), col = 'blue')
希望它有所帮助。

PS:在此示例中不需要 zoo 包,您可以使用过滤器功能。 您可以使用以下内容提取季节性平均值

s.mean = tapply(serie, cycle(serie), mean)
# January, assuming serie is monthly data
print(s.mean[1])

答案 1 :(得分:1)

这个图很难读,因为你的三组值非常相似。尽管如此,如果您只想在样本图上绘制所有这些图形,您可以使用模型生成的系数轻松完成。

第1步:绘制原始数据。这来自您的原始代码。

plot(nottem,type="l",ylab="Average monthly temperature at Nottingham castle") 

第2步:设置平均值和余弦图的x值。

x <- seq(1920, (1940 - 1/12), by=1/12)

第3步:通过重复第一个模型中的系数来绘制季节性方法。

lines(x=x, y=rep(model$coefficients, 20), col="blue")

步骤4 :使用第二个模型中的系数计算余弦函数的y值,然后绘图。

y <- model1$coefficients[2] * cos(2 * pi * x) + model1$coefficients[1]
lines(x=x, y=y, col="red")

ggplot变种:如果您决定切换到您的情节的流行'ggplot2'套餐,您可以这样做:

x <- seq(1920, (1940 - 1/12), by=1/12)
y.seas.mean <- rep(model$coefficients, 20)
y.har.cos <- model1$coefficients[2] * cos(2 * pi * x) + model1$coefficients[1]

plot_Data <- melt(data.frame(x=x, temp=nottem, seas.mean=y.seas.mean, har.cos=y.har.cos), id="x")
ggplot(plot_Data, aes(x=x, y=value, col=variable)) + geom_line()