2013-05-28 13 views
8
library(ggplot2) 
library(gridExtra) 
p1 <- qplot(rnorm(10), rnorm(10)) 
p2 <- qplot(rnorm(10), rnorm(10)) 
p3 <- qplot(rnorm(10), rnorm(10)) 
p4 <- qplot(rnorm(10), rnorm(10)) 
p5 <- qplot(rnorm(10), rnorm(10)) 
grid.arrange(p1, p2, p3, p4, p5, nrow=2) 

Chciałbym wyśrodkować dwie dolne działki. Jak to zrobić? Mogę to zrobić za pomocą split.screen, ale nie jestem w stanie dowiedzieć się, jak to zrobić z ggplot2. ggplot2 ma fajniejszą grafikę.ggplot2: Wykreślanie na siatce z mniejszą liczbą działek niż rzutnie

Z góry dziękuję!

PK

Odpowiedz

12

można użyć pakietu gtable elastycznych i wygodnych układów sieciowych, lub po prostu gniazdo dwóch arrangeGrobs,

ng = nullGrob() 
grid.arrange(arrangeGrob(p1, p2, p3, nrow=1), 
      arrangeGrob(ng, p4, p5, ng, nrow=1, widths=c(0.5, 1, 1, 0.5)), 
      nrow=2) 

enter image description here


Edit: Na dnie działki na całą szerokość, po prostu trzeba usunąć dummy nullGrobs() w powyższym Rozwiązanie:

grid.arrange(arrangeGrob(p1, p2, p3, nrow=1), 
      arrangeGrob(p4, p5, nrow=1), 
      nrow=2) 

enter image description here

+1

Uwielbiałeś odpowiedź, ale byłbyś zainteresowany widzeniem t Odpowiedź 'gtable', o której mówisz również. +1 –

+0

Dzięki. Co by było lepiej, gdyby dolne działki wypełniły przestrzeń. – polarise

+0

Doskonale! Tam jest odpowiedź ... – polarise

7

Poniżej przedstawiono alternatywny sposób stosując gtable:

library(gtable) 
gtable_add_grobs <- gtable_add_grob #misleading name 

g <- gtable(widths = unit(rep(1, 6), "null"), # need lcm(3,2)=6 for the matrix rows 
      heights = unit(rep(1, 2), "null")) 

#gtable_show_layout(g) 

g <- gtable_add_grobs(g, lapply(list(p1, p2, p3, p4, p5), ggplotGrob), 
        t = c(1, 1, 1, 2, 2), 
        l = c(1, 3, 5, 2, 4), 
        r = c(2, 4, 6, 3, 5)) 

grid.newpage() 
grid.draw(g) 

Edycja: Na dolne działek rozciągać się na całą szerokość, wystarczy zmieniać odpowiadającą L i R indeksy,

g <- gtable_add_grobs(g, lapply(list(p1, p2, p3, p4, p5), ggplotGrob), 
         t = c(1, 1, 1, 2, 2), 
         l = c(1, 3, 5, 1, 4), 
         r = c(2, 4, 6, 3, 6)) 
Powiązane problemy