将标准 XTS 对象转换为季节性图

Turning a Standard XTS Object Into a Seasonal Plot

fpp2包有一个很棒的函数ggseaonplot()。我想通过将我的 xts 对象变成一个矩阵来使用它,其中 "Years" 是行名,12 个月是列名。

#here is the data. This is stock data from yahoo finance
library(quantmod)
getSymbols("SPY")
adjusted = Ad(SPY)
head(adjusted)

#here is an example of what I would like the data to look like using the  
AirPassengers matrix.
dput(AirPassengers)
structure(c(112, 118, 132, 129, 121, 135, 148, 148, 136, 119, 
104, 118, 115, 126, 141, 135, 125, 149, 170, 170, 158, 133, 114, 
140, 145, 150, 178, 163, 172, 178, 199, 199, 184, 162, 146, 166, 
171, 180, 193, 181, 183, 218, 230, 242, 209, 191, 172, 194, 196, 
196, 236, 235, 229, 243, 264, 272, 237, 211, 180, 201, 204, 188, 
235, 227, 234, 264, 302, 293, 259, 229, 203, 229, 242, 233, 267, 
269, 270, 315, 364, 347, 312, 274, 237, 278, 284, 277, 317, 313, 
318, 374, 413, 405, 355, 306, 271, 306, 315, 301, 356, 348, 355, 
422, 465, 467, 404, 347, 305, 336, 340, 318, 362, 348, 363, 435, 
491, 505, 404, 359, 310, 337, 360, 342, 406, 396, 420, 472, 548, 
559, 463, 407, 362, 405, 417, 391, 419, 461, 472, 535, 622, 606, 
508, 461, 390, 432), .Tsp = c(1949, 1960.91666666667, 12), class = "ts")

最终项目应该与此类似。

library(fpp2)
ggseasonplot(AirPassengers)

class(adjusted) 
#[1] "xts" "zoo"

adjustedxts 类型,但 ggseasonplot 需要 ts 类型的对象。

这是 ggplot2 的替代方案

准备数据

library(zoo)
df <- data.frame(date = index(adjusted),value = coredata(adjusted),row.names = NULL)
df$month <- factor(format(df$date, "%b"), levels = month.abb)
df$year <- format(df$date, "%Y")

绘制数据

library(ggplot2)

ggplot(df) +
   aes(month, SPY.Adjusted, group = year, color = year) + 
   geom_line()