我试图在预测中获得一些合理的标签。
这是我的代码:
library("forecast")
t <- ts(
c(
4410.0, 6435.0,
4939.0, 6487.0, 25521.0, 18764.0,
12223.0, 18590.0, 36898.0, 28826.0,
20329.0
)
, frequency = 4
, start=c(2011, 7, 1)
)
cast <- meanf(t,h=4)
par(mfrow=c(1,1),xaxt="n")
plot(cast)
ticks <- seq(as.POSIXct("2011-07-01"), by = "3 month", length.out=length(cast) + 4)
axis.Date(1, at = ticks, labels = ticks, format="%Y-%m")
没有错误或警告......但没有轴添加到图中:(
如果我使用xaxt="s"
,那么我会获得轴标签,但他们并不是像2014.0这样的东西(即根本没有格式化为日期)。理想情况下,我实际上喜欢更具可读性的东西,例如&#34; 2014年第3季度&#34;但我会在2014-07(本季度的第一个月)结算。
知道我做错了什么吗?我在互联网上找到的所有内容都建议禁用默认轴,然后使用轴或轴。日期功能可以添加自定义...但我无法使用任何类型的轴这些方法中的任何一种:(
答案 0 :(得分:1)
我不会说有错误,而是forecast::plot.forecast
函数不适用于axis.Date
或axis.POSIXct
(forecast
未使用的axis.Date
})。
在调用函数axis.POSIXct
和plot
之前,必须将时间点作为一系列Date
或POSIXct
对象显式传递给plot(t)
。如果我们将时间序列绘制为time
,那么x轴似乎没有被正确定义为由上述函数使用。
请参阅下面的代码以及如何创建变量plot
并将其传递给plot(time, x)
。使用plot(x)
代替axis
。因此,函数forecast::plot.forecast
将能够显示时间轴的标签。 (在这个例子中,置信区间看起来不那么好
由library("forecast")
require(zoo)
t <- ts(
c(
4410.0, 6435.0,
4939.0, 6487.0, 25521.0, 18764.0,
12223.0, 18590.0, 36898.0, 28826.0,
20329.0
)
, frequency = 4
, start=c(2011, 7, 1)
)
cast <- meanf(t, h=4)
x <- ts(c(t, cast$mean), start = c(start(t), 1), frequency = frequency(t))
time <- as.yearqtr(seq(start(x)[1], end(x)[1] + 1, 1/frequency(x)))
time <- time[seq_along(x)]
time <- as.POSIXct(time)
plot(time, x, type = "n", xaxt = "n", ylim = range(c(cast$lower, cast$upper)))
lines(time[seq_along(t)], t)
lines(time[-seq_along(t)], cast$mean, col = "blue")
lines(time[-seq_along(t)], cast$upper[,2], col = "red")
lines(time[-seq_along(t)], cast$lower[,2], col = "red")
ticks <- seq(as.POSIXct("2011-07-01"), by = "3 month", length.out=length(cast) + 4)
axis(side = 1, at = ticks, labels = ticks)
显示。)
{{1}}