2010-07-13 11 views
3

J'essaie de placer plusieurs tracés de séries temporelles ggplot2 sur une page en utilisant la fonction arrange() du paquet gridExtra. Malheureusement, je constate que les étiquettes de l'axe des x sont poussées ensemble; il semble que l'intrigue place le même nombre d'étiquettes sur l'axe des X qu'un tableau à pleine page, même si mes graphiques ne prennent qu'un quart de page. Y a-t-il une meilleure manière de faire cela? Je préférerais ne pas avoir à définir manuellement des points, car je vais traiter avec un grand nombre de graphiques qui couvrent des plages de dates différentes et ont des fréquences différentes.Les étiquettes de date se chevauchent lors de la mise en place de plusieurs tracés ggplot sur une seule page

Voici un exemple de code qui réplique le problème.

dfm <- data.frame(index=seq(from=as.Date("2000-01-01"), length.out=100, by="year"), 
    x1=rnorm(100), 
    x2=rnorm(100)) 
mydata <- melt(dfm, id="index") 

pdf("test.pdf") 
plot1 <- ggplot(mydata, aes(index, value, color=variable))+geom_line() 
plot2 <- ggplot(mydata, aes(index, value, color=variable))+geom_line() 
plot3 <- ggplot(mydata, aes(index, value, color=variable))+geom_line() 
plot4 <- ggplot(mydata, aes(index, value, color=variable))+geom_line() 
arrange(plot1, plot2, plot3, plot4, ncol=2, nrow=2) 
dev.off() 

Répondre

5

Pivoter l'axe des étiquettes

+ opts(axis.text.x=theme_text(angle=45, hjust=1)) 

Notez que opts est obsolète dans les versions actuelles de ggplot2. Cette fonctionnalité a été déplacée theme():

+ theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

ou diluer l'axe x

+scale_x_datetime(major = "10 years") 

de passer automatiquement les étiquettes, je pense que la fonction organiser() doit être tripoté (bien que je je ne sais pas comment).

+0

+1 pour la rotation de l'axe ... assez difficile à trouver – regilero

3

J'ai écrit cette fonction pour renvoyer les ruptures majeures de l'axe principal étant donné que vous voulez un certain nombre de ruptures majeures. Donc, au lieu de toujours fixer les ruptures à 10 ans, il produira un nombre fixe de ruptures à de bons intervalles.

+scale_x_date(major = year.range.major()) 

ou

+scale_x_date(major = year.range.major(n=3)) 
+0

très agréable, je l'avais oublié la fonction jolie(). – apeescape

+0

Merci pour la solution. Malheureusement, je suis confronté à une série d'erreurs lorsque j'utilise différentes séquences de dates. La fonction year.range.major elle-même ne semble pas avoir de problèmes, mais ggplot explose. Par exemple, si je mets la séquence de date à 100 jours consécutifs que je reçois un "nombre de niveaux diffère" erreur. Si je prends l'exemple original et utilise des dates POSIXlt que je reçois une erreur "impossible d'allouer un vecteur de longueur ...". Et quand je refais l'exemple original avec des jours consécutifs exprimés en tant qu'objets POSIXlt que je reçois une erreur "Erreur dans seq.int (r1 $ année, à $ année, par): 'à' doit être finie". – Abiel