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

时间:2019-04-02 03:52:36

标签: r ggplot2 xts

fpp2软件包具有出色的功能ggseaonplot()。我想通过将xts对象转换成一个矩阵来使用它,其中“ Years”是行名,而12month是列名。

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

enter image description here

#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")

enter image description here

这是最终项目应类似于的内容。

library(fpp2)
ggseasonplot(AirPassengers)

enter image description here

1 个答案:

答案 0 :(得分:2)

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

adjusted的类型为xts,但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()

enter image description here