2015-05-18 5 views
8

मैं ऐसेggplot2: grid.arrange साथ साजिश लेआउट() को परिभाषित करें() 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

लेकिन एक समारोह

का उपयोग कर के रूप में भूखंडों की एक असंतुलित ग्रिड प्राप्त करना चाहते हैं के रूप में
myplot <- function(i){ 
    p <- ggplot(df) + geom_density(aes_string(x=i)) 
    return(p) 
} 

और एक lapply कॉल

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

इस मामले में grid.arrange 2 से 2 मैट्रिक्स में भूखंड वितरित करें। लेकिन मैं

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

मेरा प्रश्न अलग है क्योंकि मेरे मामले में भूखंडों असंतुलित कर रहे हैं। मैं बस एक सूची को पास नहीं कर सकता हूं। क्योंकि मैं अलग-अलग भूखंडों के लिए अलग-अलग ऊंचाई चाहता हूं (चित्र देखें) – CptNemo

+0

तो, आप एक लेआउट को परिभाषित करना चाहते हैं। कृपया तदनुसार अपने प्रश्न शीर्षक और शरीर को समायोजित करें। – Roland

+0

कुछ संपादन किया था। यह सुनिश्चित नहीं है कि यह ठीक है या नहीं, सुनिश्चित करें कि लेआउट द्वारा आपका क्या मतलब है। – CptNemo

उत्तर

14

अब आप क्या कर सकते हैं के साथ के रूप में एक असंतुलित लेआउट प्राप्त करने के लिए चाहते हैं,

grid.arrange(p1,p2,p3,p4, layout_matrix = rbind(c(1,1,1),c(2,3,4))) 
संबंधित मुद्दे