2015-05-18 8 views
8

chcę uzyskał niesymetrycznego siatkę działek, takich jakggplot2: Definiowanie układu wydruku z grid.arrange() jako argument do.call()

require(ggplot2) 
require(gridExtra) 

df <- data.frame(value1 = rnorm(200), 
       value2 = rnorm(200), 
       value3 = rnorm(200), 
       value4 = rnorm(200)) 

p1 <- ggplot(df) + geom_density(aes(x=value1)) 
p2 <- ggplot(df) + geom_density(aes(x=value2)) 
p3 <- ggplot(df) + geom_density(aes(x=value3)) 
p4 <- ggplot(df) + geom_density(aes(x=value4)) 

grid.arrange(p1, arrangeGrob(p2,p3,p4, ncol=3), heights=c(2.5/4, 1.5/4), ncol=1) 

enter image description here

ale przy użyciu funkcji

myplot <- function(i){ 
    p <- ggplot(df) + geom_density(aes_string(x=i)) 
    return(p) 
} 

i lapply wezwanie

p <- lapply(c("value1","value2","value3","value4"), myplot) 
do.call(grid.arrange, c(p)) 

W tym przypadku grid.arrange dystrybuuje wykresy w macierzy 2 na 2. Ale chcę, aby uzyskać jak niezrównoważony układ z

grid.arrange(p1, arrangeGrob(p2,p3,p4, ncol=3), heights=c(2.5/4, 1.5/4), ncol=1) 
+0

Moje pytanie jest inna, ponieważ w moim przypadku działki są niesymetryczne. Nie mogę po prostu przekazać listy do zrobienia.call ponieważ chcę różnych wysokości dla różnych działek (patrz rysunek) – CptNemo

+0

Więc chcesz zdefiniować układ. Zmień odpowiednio tytuł i treść pytania. – Roland

+0

Dokonano pewnych zmian. Nie wiem, czy to jest w porządku, nie wiem dokładnie, co masz na myśli przez układ. – CptNemo

Odpowiedz

14

można teraz zrobić,

grid.arrange(p1,p2,p3,p4, layout_matrix = rbind(c(1,1,1),c(2,3,4))) 
Powiązane problemy