grid.arrange ggplot2 使用列表按列而不是按行绘制
grid.arrange ggplot2 plots by columns instead of by row using lists
我想使用 grid.arrange
从列表中创建 ggplot2
个绘图的多图,但先按列排列,然后再按行排列。
gg_list1 <- list(qplot(mpg, disp, data = mtcars),
qplot(hp, wt, data = mtcars),
qplot(qsec, wt, data = mtcars))
gg_list2 <- list(qplot(mpg, disp, data = mtcars),
qplot(hp, wt, data = mtcars),
qplot(qsec, wt, data = mtcars))
我知道我能做到:
do.call(grid.arrange,c(gg_list1,gg_list2 , ncol = 2, nrow = 3))
但它先从左到右再从上到下填充。
我试过这个:
do.call(grid.arrange, c(gg_list1, arrangeGrob(gg_list2, nrow = 3), ncol = 2))
但是得到Error: length(widths) == ncol is not TRUE
有什么想法吗?
你可以使用grobs
参数传递一个列表,as.table
参数按列填充,所以用c
压平,你只需要
grid.arrange(grobs = c(gg_list1, gg_list2), ncol = 2, as.table = FALSE)
如果你想要更复杂的布局,使用layout_matrix
参数:
my_layout <- rbind(c(1, 1:3, 4), c(1, 1:3, 4), c(1, 1:3, 5), c(1, 1:3, 6))
my_layout
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 1 2 3 4
## [2,] 1 1 2 3 4
## [3,] 1 1 2 3 5
## [4,] 1 1 2 3 6
grid.arrange(grobs = c(gg_list1, gg_list2), layout_matrix = my_layout)
有关详细信息,请参阅 the arrangeGrob
vignette。
我想使用 grid.arrange
从列表中创建 ggplot2
个绘图的多图,但先按列排列,然后再按行排列。
gg_list1 <- list(qplot(mpg, disp, data = mtcars),
qplot(hp, wt, data = mtcars),
qplot(qsec, wt, data = mtcars))
gg_list2 <- list(qplot(mpg, disp, data = mtcars),
qplot(hp, wt, data = mtcars),
qplot(qsec, wt, data = mtcars))
我知道我能做到:
do.call(grid.arrange,c(gg_list1,gg_list2 , ncol = 2, nrow = 3))
但它先从左到右再从上到下填充。
我试过这个:
do.call(grid.arrange, c(gg_list1, arrangeGrob(gg_list2, nrow = 3), ncol = 2))
但是得到Error: length(widths) == ncol is not TRUE
有什么想法吗?
你可以使用grobs
参数传递一个列表,as.table
参数按列填充,所以用c
压平,你只需要
grid.arrange(grobs = c(gg_list1, gg_list2), ncol = 2, as.table = FALSE)
如果你想要更复杂的布局,使用layout_matrix
参数:
my_layout <- rbind(c(1, 1:3, 4), c(1, 1:3, 4), c(1, 1:3, 5), c(1, 1:3, 6))
my_layout
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 1 2 3 4
## [2,] 1 1 2 3 4
## [3,] 1 1 2 3 5
## [4,] 1 1 2 3 6
grid.arrange(grobs = c(gg_list1, gg_list2), layout_matrix = my_layout)
有关详细信息,请参阅 the arrangeGrob
vignette。