2013-05-21 5 views
1

Ma situation est calme comme this question, comment jamais j'ai besoin de tracer plusieurs séries chronologiques (ou vecteurs de longueur fixe) dans un panneau. (Je veux télécharger une image mais il dit que je n'ai pas assez de réputation ...)Comment personnaliser l'axe lorsque tracer plusieurs données de séries temporelles dans un panneau?

voici mon exemple de code.

La colonne "id" identifie un utilisateur. (Exemple de code a seulement 1 utilisateur)
Colonne échelle "temps" de 1 à 24 * 7 heures (résumé horaire de 1 semaine)
colonne "A", "B", "C" sont résumé des attributs horaire

> require(data.table) 
# Create some data 
> dt<-data.table(id=rep(123,168),time=1:168,A=rnorm(168,10,5),B=rnorm(168,100,20),C=rnorm(168,10,5)) 
> dt 
     id time   A   B   C 
    1: 123 1 2.435577 147.01446 12.484723 
    2: 123 2 15.119403 88.05115 7.226495 
    3: 123 3 17.835930 110.01482 6.888222 
    4: 123 4 10.455834 102.48860 13.098892 
    5: 123 5 8.107672 83.70896 7.711350 
---          
164: 123 164 8.301877 145.88020 10.195002 
165: 123 165 12.403081 97.90534 14.249087 
166: 123 166 16.563673 125.69398 11.039720 
167: 123 167 11.091746 98.81823 15.131038 
168: 123 168 10.190338 87.32466 11.422943 
> z<-zoo(dt) 
> plot(z[,3:5],yax.flip=TRUE,col=1:3) #plot all attributes timeseries in one panel 

Je voudrais ajouter grille et personnaliser l'axe x être quelque chose comme ceci:.

lUN., 1,2,3, ..., 23, mar, 1,2,3 ,. .., 23, mer., 1,2,3, ..., 23, jeu., 1,2,3, ..., 23, ven., 1,2,3, ..., 23, Sat.1,2,3, ..., 23, Sun., 1,2,3, ..., 23

J'ai essayé d'utiliser axis, abline et grid pour obtenir ce que je veux, mais il ne fonctionnera pas. (Il fonctionne très bien si plot.type=single)

+0

Essayez paramètre 'xaxt = "n"' 'dans votre appel de plot' d'origine, puis utilisez' axis' pour ajouter l'axe que vous désirez. – Thomas

+0

@Thomas j'ai essayé mais ça n'a pas marché, la méthode de @P Lapointe est la bonne façon de procéder. J'ai vérifié le? Plot.zoo encore et il a dit "l'axe peut être employé dans les panneaux eux-mêmes mais pas dehors du panneau" – JerseyGood

Répondre

1

Vous devez utiliser l'option panel dans plot.zoo. Cela vous permet d'ajouter la grille à tous les panneaux. Et vous pouvez également ajouter l'axe inférieur au dernier panneau de l'intrigue. Je n'ai pas mis tous les numéros d'heures parce qu'il aurait été trop de monde.

ax.date <-as.POSIXlt("2013-01-06")+(0:167)*3600 #Dummy date for POSIXlt method 

my.panel <- function(x, y, ..., pf = parent.frame()) { 
grid(NA,NULL) 
abline(v=seq(1,168,24),col = "lightgray", lty = "dotted", lwd = par("lwd")) 
lines(x, y, ...) 

#if bottom panel 
if (with(pf, length(panel.number) == 0 || 
     panel.number %% nr == 0 || panel.number == nser)) { 
     # create ticks at x values and then label every 24th tick 
     axis(side = 1, at = x, labels = FALSE, tcl=-0.3) #hour ticks 
     axis(side = 1, at = seq(1,168,6), labels = FALSE) #6hour ticks ticks 
     axis(1,at=seq(1,168,24), labels=format(ax.date[seq(1,168,24)],"%a")) #day of the week 
     axis(1,at=seq(13,168,24),labels=format(ax.date[seq(13,168,24)],"%H"), cex.axis=0.7) #noon ticks 
    } 
} 
plot(z[,3:5], panel = my.panel,yax.flip=TRUE,col=1:3,xaxt="n") 

enter image description here

+0

C'est grand! Merci! Y at-il un moyen de rendre la grille verticale plus dense? – JerseyGood

+0

J'ai modifié mon message pour ajouter des lignes verticales au début de la journée. Fondamentalement, l'appel de grille devient: 'grid (NA, NULL)' et j'ajoute des ablines verticales: 'abline (v = seq (1,168,24), col =" lightgray ", lty =" pointillé ", lwd = par (" lwd "))' –

Questions connexes