Sto creando un grafico utilizzando facet_grid
per sfaccettare una variabile categoriale sull'asse y. Ho deciso di non utilizzare facet_wrap
perché ho bisogno di space = 'free'
e labeller = label_parsed
. Le mie etichette sono lunghe e ho una legenda sulla destra, quindi vorrei spostare le etichette dalla parte destra del pannello alla parte superiore del pannello.ggplot2: Utilizzo di gtable per spostare le etichette delle strisce nella parte superiore del pannello per facet_grid
Ecco un esempio per mostrare dove mi sto bloccando.
library(ggplot2)
library(gtable)
mt <- ggplot(mpg, aes(x = cty, y = model)) + geom_point() +
facet_grid(manufacturer ~ ., scales = 'free', space = 'free') +
theme_minimal() +
theme(panel.margin = unit(0.5, 'lines'), strip.text.y = element_text(angle = 0))
Ora vorrei spostare il testo striscia da destra di ogni pannello alla parte superiore di ogni pannello. Posso memorizzare i grobs per le etichette nastri e rimuoverli dal terreno:
grob <- ggplotGrob(mt)
strips.y <- gtable_filter(grob, 'strip-right')
grob2 <- grob[,-5]
Ma ora mi sono bloccato quando si tratta di rbind
-ing le grobs indietro in modo le etichette vanno alla parte superiore dei pannelli.
Un'altra possibile soluzione potrebbe essere quella di utilizzare facet_wrap
e poi ri-size pannelli as discussed in another question, ma in quel caso dovrebbe cambiare manualmente le etichette sulle sfaccettature perché non c'è labeller = label_parsed
per facet_wrap
.
Gradirei suggerimenti su entrambi gli approcci!
Grazie per la lettura,
Tom
Questo è fantastico, grazie.Ho appena apportato un paio di piccole modifiche al tuo primo approccio in modo che potessi trasformarlo in una funzione: 'for (i in 1: length (strips $ t)) gt = gtable_add_grob (gt, stripText $ grobs [[i ]], t = pannelli $ t [i] -1, l = 4, r = 4) ' -> ' per (i in 1: lunghezza (strisce $ t)) gt = gtable_add_grob (gt, stripText $ grobs [[i]], t = pannelli $ t [i] -1, l = min (pannelli $ l), r = max (pannelli $ r)) ' per inserire i nuovi solchi per le strisce e ' gt = gt [ , -5] ' -> ' gt <- gt [, - c (min (strisce $ l), max (strisce $ r))] ' per rimuovere le vecchie strisce. –