Se non si dispone di usare arrangeGrob
: e 'possibile estrarre grobs da un layout gtable
. Ci vuole più tempo per impostare il layout, ma l'estrazione dell'elemento richiesto è semplice.
library(gtable)
library(grid)
gt = gtable(unit(c(3.5, 7.5), "null"), unit(1, "null"))
gt = gtable_add_grob(gt, ggplotGrob(g1), l = 1, t = 1)
gt = gtable_add_grob(gt, ggplotGrob(g2), l = 2, t = 1)
plot(gt)
plot(gt[, 1])
plot(gt[, 2])
Se si desidera mantenere la dimensione e il posizionamento della trama estratto lo stesso come la sua dimensione e il posizionamento nella trama combinato:
EDIT: Utilizzando suggerimento di Baptiste:
gt = gtable(unit(c(3.5, 7.5), "null"), unit(1, "null"))
gt = gtable_add_grob(gt, ggplotGrob(g1), name = "g1", l = 1, t = 1)
gt = gtable_add_grob(gt, ggplotGrob(g2), name = "g2", l = 2, t = 1)
grid.newpage()
grid.draw(gtable_filter(gt, "g2", trim = FALSE))
grid.newpage()
grid.draw(gtable_filter(gt, "g1", trim = FALSE))
Originale:
# Keep g2
p2 = gt
p2$layout = gt$layout[-1, ]
p2$grobs = gt$grobs[-1]
grid.newpage()
grid.draw(p2)
# Keep g1
p1 = gt
p1$layout = gt$layout[-2, ]
p1$grobs = gt$grobs[-2]
grid.newpage()
grid.draw(p1)
Sapevo che c'era un modo più semplice! Dovrebbe essere 'grid.ls (g)' se non vuoi disegnarlo per primo? Non sono sicuro che la mia risposta sia utile ora e potrei eliminarla. – Spacedman
@Spacedman - Il tuo potrebbe non essere l'approccio più utile, anche se il signore sa che l'ho usato abbastanza spesso in passato! –
Questo è fantastico !!! :-) Mi ha salvato ore di tempo !!! – drmariod