将标准 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"
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()
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"
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()