2014-07-09 97 views
2

我試圖在預測上獲得一些合理的標籤。繪製R中的預測的自定義軸標籤

這裏是我的代碼:

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這樣的東西(即沒有格式化爲日期)理想情況下,我實際上喜歡像「2014年第三季度」這樣的可讀性更強的東西,但我會在2014 - 07年(第一個月這個季度)

任何想法我做錯了什麼?所有的東西我fou nd搜索互聯網建議禁用默認軸,然後使用軸或axis.Date函數來添加自定義...但我無法使用這些方法中的任何一種獲取軸:(

+0

有趣的是,如果你做'圖(HW(USAccDeaths,H = 48))',它自帶直從[幫助頁面到'plot.forecast'](http://www.inside-r.org/packages/cran/forecast/docs/plot.forecast),你也沒有得到時間軸的註釋。我會說這是一個錯誤。我會指出羅伯Hyndman這一點。 –

+0

@Stephan Kolassa如果我要求(預測); plot(hw(USAccDeaths,h = 48))'我在時間軸上看到標籤。也許你沒有重置圖形參數,並且仍然有問題中給出的例子(發生在我身上)的配置'par(mfrow = c(1,1),xaxt =「n」)''。 – javlacalle

回答

1

I不會說有錯誤,而功能forecast::plot.forecast不適用於與axis.Dateaxis.POSIXct(它們未在包forecast中使用)一起使用。

之前調用函數axis.Dateaxis.POSIXct,時間點必須明確地傳遞給plotDatePOSIXct對象序列。如果我們將時間序列繪製爲plot(t),那麼x軸似乎沒有被正確定義爲被上述函數使用。

請參閱下面的代碼以及如何創建變量time並將其傳遞給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)