2015-02-12 30 views
5

Używam ggplot w R do wykreślenia kilku warunków z facet_wrap. Chciałbym umieścić pasek z nazwą działki na osi pionowej po prawej zamiast na górze.R/ggplot: pionowy tekst paska z facet_wrap

To jest przykład:

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 Oto nazwiska terenu (A, B, C, D, E) są na górze, chciałabym im być po prawej stronie, jak tutaj :

gg + facet_grid(name ~ .) 

enter image description here

Czy istnieje prosty przełącznik, aby to zrobić? (Nie używam facet_grid, ponieważ chciałbym użyć opcji nrow i ncol dostarczanych z facet_wrap).

Dzięki! 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

I nie sądzę, że to będzie łatwe. Jedyne, co mogę sobie wyobrazić, to utworzenie zmiennej dummy i użycie jej z 'facet_grid'. Zawsze możesz spróbować manipulacji niskopoziomowych za pomocą 'grid/gridExtra', ale to skomplikowana ścieżka. – tonytonov

+1

OK, dzięki za opinie. Domyślam się, że najróżniejsza trasa jest najłatwiejsza, chociaż niechętnie zmieniam dane tylko dla celów estetycznych. – dariober

Odpowiedz

2

Na przyszłość, można teraz używać strip.position="right" do put them on the right side, np .:

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

Jeśli chcesz mieć etykiety fazowane po stronie lewej aspektach to istnieje proste rozwiązanie, w którym oś y staje na osi x, a oś x staje się y- oś.

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

Przesuwanie facet_wrap etykiet do prawej strony obróconego graficznej byłoby zrobić z kąta obrotu -90. Miałoby to jednak efektywną oś X na wierzchołkach. Musisz pracować nad kodem do przesuwania etykiet osi Y od lewej do prawej strony "standardowego" wykresu, a następnie obracać, jak pokazano tutaj, przez -90.

+0

To jest interesujące i dość proste podejście, dzięki! Każdy pomysł, jak zapewnić wynikowy rozmiar działki, nie powoduje przepełnienia widoku? – cashoes