2015-05-18 12 views
8

Voglio ottenere una griglia squilibrato di trame comeggplot2: Definire tavola-stampa con grid.arrange() come argomento di 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

ma utilizzando una funzione

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

ed un lapply chiamata

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

In questo caso grid.arrange distribuire i grafici in una matrice 2 x 2. Ma io voglio ottenere un layout sbilanciata come con

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

La mia domanda è diverso, perché nel mio caso le trame sono sbilanciati. Non posso semplicemente passare una lista per fare.call perché voglio altezze diverse per i diversi grafici (vedi figura) – CptNemo

+0

Quindi, si desidera definire un layout. Si prega di regolare il titolo della domanda e il corpo di conseguenza. – Roland

+0

Ha apportato alcune modifiche. Non sono sicuro che sia OK, non sono sicuro di cosa intendi per layout. – CptNemo

risposta

14

È ora possibile fare,

grid.arrange(p1,p2,p3,p4, layout_matrix = rbind(c(1,1,1),c(2,3,4))) 
Problemi correlati