Alterar anotações em parcelas de séries temporais em r
-
22-09-2019 - |
Pergunta
Embora eu possa alterar as anotações com o comando genérico da plotagem desligando eixos e anotações e especificando -os novamente usando o comando do eixo, por exemplo
cars <- c(1, 3, 6, 4, 9)
plot(cars, type="o", col="blue", ylim=range(0, cars), axes=FALSE, ann=FALSE)
axis(1, at=1:5, lab=c("Mon","Tue","Wed","Thu","Fri"))
Eu não posso fazer isso com o objeto de série temporal, por exemplo
www <- "http://www.massey.ac.nz/~pscowper/ts/Maine.dat"
Maine.month <- read.table(www, header = TRUE)
attach(Maine.month)
Maine.month.ts <- ts(unemploy, start = c(1996, 1), freq = 12)
Maine.98 <- window(Maine.month.ts, start = c(1998,1), end = c(1998,11))
Como posso traçar Maine.98
com anotações parecendo:
"Jan-98" "Feb-98" "Mar-98" "Apr-98" "May-98" etc?
Solução
Você encontrou o ts
Digite para séries temporais adequadas para modeling arima e série com 'Delta T' fixo, como Monhtly ou Series Quarterly.
Mas R é bom em trabalhar com datas em geral. Tente experimentar para manter seus dados em um data.frame
, mas converta seus dados do eixo x em qualquer tipo Date
ou POSIXt
. o plot()
Chamará uma função de formatação de eixo que conhece o tempo e você obtém melhores padrões que você ainda pode substituir.
Melhor ainda é o uso de pacotes jardim zoológico ou XTS que lhe dão controle adicional, bem como sinos e assobios:
> X <- data.frame(x=seq(Sys.Date()-11*31,Sys.Date(),by="1 months"),
y=cumsum(rnorm(12)))
> plot(X) # plot as a data.frame with Date column
> library(zoo)
> plot(zoo(X[,-1], X[,1])) # plot as a zoo object
> library(xts)
> plot(xts(X[,-1], X[,1])) # plot as an xts object
Editar: Eu esqueci que se seus dados já são um ts
objeto, você tem conversores mais fáceisas.zoo()
e as.xts()
. E a plot.zoo
A página de ajuda tem exemplos para formatação personalizada do eixo do tempo.
Outras dicas
Só para acrescentar o que Dirk disse:
Depois de usar um tipo de data apropriado (data ou Posixt), você pode usar o comando format () para escolher como deseja que ele pareça em seu gráfico:
> format(seq(Sys.Date()-11*31,Sys.Date(),by="1 months"), "%b-%y")
[1] "Oct-08" "Nov-08" "Dec-08" "Jan-09" "Feb-09" "Mar-09" "Apr-09" "May-09"
[9] "Jun-09" "Jul-09" "Aug-09" "Sep-09"
Veja a ajuda do STRPTIME para obter mais exemplos de opções de formatação.
?strptime