2015-05-18 17 views
8

Tôi muốn lấy một lưới không cân bằng của âm mưu nhưggplot2: Xác định bố trí cốt truyện với grid.arrange() như là đối số của 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

nhưng sử dụng một hàm

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

và một lapply gọi

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

Trong trường hợp này, grid.arrange phân phối ô theo ma trận 2 x 2. Nhưng tôi muốn để có được một bố cục không cân bằng như với

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

Câu hỏi của tôi là khác nhau bởi vì trong trường hợp của tôi lô là không cân bằng. Tôi không thể chỉ đơn giản là vượt qua một danh sách để làm.call vì tôi muốn chiều cao khác nhau cho các lô khác nhau (xem hình) – CptNemo

+0

Vì vậy, bạn muốn xác định một bố trí. Vui lòng điều chỉnh tiêu đề câu hỏi và nội dung phù hợp. – Roland

+0

Đã thực hiện một số chỉnh sửa. Bạn không chắc chắn liệu nó có ổn không, không chắc chắn chính xác ý bạn là gì bởi bố cục. – CptNemo

Trả lời

14

Bây giờ bạn có thể làm,

grid.arrange(p1,p2,p3,p4, layout_matrix = rbind(c(1,1,1),c(2,3,4))) 
Các vấn đề liên quan