2009-09-09 14 views
2

Bien que je puisse modifier les annotations avec la commande générique plot désactivant les axes et les annotations et les spécifiant à nouveau à l'aide de la commande d'axe, par ex.Modification des annotations dans les tracés de séries temporelles dans R

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

Je ne peux pas le faire avec un objet de série temporelle, par ex.

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

Comment puis-je tracer Maine.98 avec annotations ressemblant à:

"Jan-98" "Feb-98" "Mar-98" "Apr-98" "May-98" etc? 

Répondre

4

Vous trouvé le type ts pour les séries chronologiques qui convient pour ARIMA la modélisation et de la série avec fixe « delta t » tels que MENSUELS ou séries trimestrielles.

Mais R est bon pour travailler avec les dates en général. Essayez d'essayer de conserver vos données dans un data.frame, mais convertissez vos données sur l'axe des x en type Date ou POSIXt. Le plot() appellera une fonction de formatage d'axe qui connaît l'heure et vous obtiendrez de meilleurs paramètres par défaut que vous pouvez toujours remplacer.

Mieux encore l'utilisation de paquets zoo ou xts qui vous donnent un contrôle supplémentaire, ainsi que des cloches et de sifflets:

> 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 

Edit: j'ai oublié que si vos données est déjà un objet ts, vous avez convertisseurs plus faciles as.zoo() et as.xts(). Et la page d'aide plot.zoo contient des exemples de formatage personnalisé de l'axe des temps.

+0

Merci. Je ne savais pas que "by" dans "seq" accepte des chaînes comme "1 mois". Où est-ce référencé dans l'aide? En dehors des mois, quels autres intervalles de temps peuvent être utilisés? –

+0

Dans ce cas, il s'agit de 'seq.Date' auquel 'seq' distribue les objets de classe' Date'. –

2

Juste pour ajouter à ce que Dirk a dit:

Une fois que vous utilisez un type de date appropriée (Date ou POSIXt), vous pouvez utiliser la commande format() pour choisir comment vous voulez regarder dans votre intrigue:

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

Regardez l'aide de strptime pour plus d'exemples d'options de formatage.

?strptime