2015-05-18 6 views
8

Ich möchte ein unausgeglichenes Raster von Plots erhalten wieggplot2: Definieren Sie Plot-Layout mit grid.arrange() als Argument von 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

aber mit einer Funktion

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

und ein lapply Anruf

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

In diesem Fall grid.arrange verteilen Sie die Diagramme in einer 2 x 2-Matrix. Aber ich mag ein unausgewogenes Layout erhalten, wie mit

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

Meine Frage ist anders, weil in meinem Fall die Plots unausgewogen sind. Ich kann nicht einfach eine Liste an do.call übergeben, weil ich unterschiedliche Höhen für verschiedene Plots haben möchte (siehe Abbildung). – CptNemo

+0

Sie möchten also ein Layout definieren. Bitte passen Sie den Titel und den Text Ihrer Frage entsprechend an. – Roland

+0

Hat einige Änderungen vorgenommen. Nicht sicher, ob es in Ordnung ist, nicht sicher, was genau Sie mit Layout meinen. – CptNemo

Antwort

14

Sie jetzt tun können,

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