2013-08-05 13 views
5

Chciałbym odwrócić etykiety na panelu z fasetami z 1 rzędu i 5 kolumn, tak aby nagłówki aspektów pojawiły się na dole, a oś x pojawi się na wierzchu faset.Etykieta klapki i oś X z ggplot2

Powodem jest to, że chcę ponownie użyć tych nagłówków dla tabeli, która będzie bezpośrednio pod wykresem.

Więc w tym przykładzie ...

library(ggplot2) 

my.hist<-ggplot(diamonds, aes(clarity)) + geom_bar() 

my.hist + facet_wrap(~ cut, ncol=5) + coord_flip() 

chciałbym „cut” etykiety, aby pokazać się poniżej wykresu. Myślałem, że facet_grid może posiadać klucz, ale jest tylko odgadnięciem.

Ktoś wie, jak to osiągnąć?

+1

Nie jestem świadomy, że odpowiedź na to pytanie zmieniła się od [this] (http://stackoverflow.com/q/3261597/324364) lub [t jego] (http://stackoverflow.com/q/10058839/324364). – joran

+0

Wygląda na złą wiadomość ... Prawdopodobnie nie na temat, ale zastanawiam się, czy krata oferuje tę funkcjonalność. – wesmantooth

Odpowiedz

7

Uzyskiwanie pasków fazowane poniżej fabuła jest prosta,

library(gtable) 
g <- ggplotGrob(p) 

strips <- gtable_filter(g, "strip_t", trim=FALSE) 
grid.newpage() 
grid.draw(rbind(g, strips[3,], size="first")) 

osie, jednak wymaga więcej opieki, ponieważ ktoś musi odwrócić pozycję znacznikami i etykiety. Można może rozpocząć się z tym,

tweak_axis <- function(a){ 
    inner <- a[["children"]]["axis"][[1]] 
    inner[["grobs"]] <- rev(inner[["grobs"]]) 
    inner$grobs[[2]]$y <- inner$grobs[[2]]$y - unit(0.15, "cm") 
    a[["children"]]["axis"][[1]] <- inner 
    a 
} 

axes <- gtable_filter(g, "axis_b", trim=FALSE) 
axes$grobs <- lapply(axes$grobs, tweak_axis) 
grid.newpage() 
grid.draw(axes) 

Edycja: na podstawie powyższego, "kompletna" rozwiązanie może być

grid.newpage() 
g2 <- g 
new_axes <- lapply(g2$grobs[grepl("axis_b", g2$layout$name)], tweak_axis) 
g$grobs[grepl("strip_t", g$layout$name)] <- new_axes 
g$grobs[grepl("axis_b", g$layout$name)] <- g2$grobs[grepl("strip_t", g2$layout$name)] 
# heights should be changed too, but it's kind of ok here 
xlab <- 7; title <- 1:2 
grid.draw(rbind(g[xlab,], g[-c(title, xlab), ], size="last")) 

enter image description here

(z oczywistymi zastrzeżeniami)

+1

kohske opublikował kilka trików dla osi: http://rpubs.com/kohske/dual_axis_in_ggplot2 – baptiste

+0

Jeśli używam '" strip_t "', a następnie uruchamiam 'strips' otrzymuję wyjście' TableGrob (6 x 5) "layout": 0 grobs'. Czy to zamierzony efekt? Pytam, ponieważ również dostaję błąd na ostatecznym wyjściu, 'Błąd w mmm wesmantooth

+1

powinieneś mieć 5 grobs w tej gtowie, upewnij się, że 'p' to twoja fabuła zaktualizowana o drugą linię (' facet_wrap'). Zaktualizowałem kod, aby zająć się innym błędem. – baptiste