2015-02-12 14 views
5

Sto utilizzando ggplot in R per tracciare diverse condizioni con facet_wrap. Vorrei mettere la striscia con il nome del tracciato sull'asse verticale a destra anziché in alto.R/ggplot: testo striscia verticale con facet_wrap

Questo è un esempio:

library(ggplot2) 
dat<- data.frame(name= rep(LETTERS[1:5], each= 4), value= rnorm(20), time= rep(1:5, 4)) 
gg<- ggplot(data= dat, aes(x= time, y= value)) + 
    geom_point() + 
    facet_wrap(~ name, ncol= 1) 

enter image description here Ecco i nomi trama (A, B, C, D, E) sono in alto, mi piacerebbe loro di essere a destra come in qui :

gg + facet_grid(name ~ .) 

enter image description here

c'è un interruttore semplice per farlo? (Non sto utilizzando facet_grid poiché desidero utilizzare le opzioni nrow e ncol fornite con facet_wrap).

Grazie! Dario

sessionInfo() 
R version 3.0.1 (2013-05-16) 
Platform: x86_64-apple-darwin10.8.0 (64-bit) 

locale: 
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] ggplot2_0.9.3.1 

loaded via a namespace (and not attached): 
[1] colorspace_1.2-4 dichromat_2.0-0 digest_0.6.4  grid_3.0.1   
[5] gtable_0.1.2  labeling_0.2  MASS_7.3-29  munsell_0.4.2  
[9] plyr_1.8.1   proto_0.3-10  RColorBrewer_1.0-5 Rcpp_0.11.0  
[13] reshape2_1.2.2  scales_0.2.3  stringr_0.6.2  tools_3.0.1  
+0

non credo che questo sarà facile. L'unica cosa che posso immaginare è creare una variabile dummy e usarla con 'facet_grid'. Puoi sempre provare le manipolazioni di basso livello con 'grid/gridExtra', ma è un percorso complicato. – tonytonov

+1

Ok, grazie per il feedback. Immagino che la variabile dummy route sia la più semplice, anche se sono riluttante a cambiare i dati solo per scopi estetici. – dariober

risposta

2

Per riferimento futuro, è ora possibile utilizzare strip.position="right"-put them on the right side, ad es .:

library(ggplot2) 
dat<- data.frame(name= rep(LETTERS[1:5], each= 4), value= rnorm(20), time= rep(1:5, 4)) 
gg<- ggplot(data= dat, aes(x= time, y= value)) + 
    geom_point() + 
    facet_wrap(~ name, ncol= 1, strip.position="right") 
1

Se siete disposti ad avere le etichette sfaccettatura sul lato sinistro delle sfaccettature allora c'è una soluzione semplice, dove l'asse Y diventa l'asse xe l'asse x diventa il y- asse.

library(ggplot2) 
library(gridExtra) 
library(gridGraphics) 

# standard plot, facet labels on top 
ggplot(diamonds) + 
    aes(x = carat, y = price) + 
    geom_point() + 
    facet_wrap(~ cut) 

enter image description here

# Use the gridExtra and gridGraphics utilities to rotate the plot. 
# This requires some modifications to the axes as well. Note the use of 
# a negative carat in the aes() call, and text modifications with theme() 
grid.newpage() 
pushViewport(viewport(angle = 90)) 
grid.draw(ggplotGrob(

    ggplot(diamonds) + 
    aes(x = price, y = -carat) + 
    geom_point() + 
    facet_wrap(~ cut) + 
    scale_y_continuous(name = "Carat", breaks = -seq(0, 5, by = 1), labels = seq(0, 5, by = 1)) + 
    theme(axis.text.y = element_text(angle = 270), 
      axis.title.y = element_text(angle = 270), 
      axis.text.x = element_text(angle = 270)) 
    )) 

enter image description here

Spostando le facet_wrap etichette al lato destro dell'immagine ruotata sarebbe fatto con un angolo di rotazione di -90. Tuttavia, questo avrebbe l'asse X efficace in cima ai grafici. Dovresti lavorare sul codice per spostare le etichette dell'asse y da sinistra a destra del grafico "standard" e quindi ruotare come illustrato qui da -90.

+0

Questo è un approccio interessante e abbastanza semplice, grazie! Qualche idea su come garantire che le dimensioni del grafico risultante non eccedano il viewport? – cashoes