grid.arrange ggplot2 отображает графики по столбцам, а не по строкам, используя списки

Я хочу создать мультиплот из ggplot2 графиков из списка, используя grid.arrange, но упорядочить их по столбцам, прежде чем делать это по строкам.

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

Есть идеи?


person Bonono    schedule 29.11.2016    source источник


Ответы (1)


Вы можете использовать параметр 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)

сложная сетка

Подробнее см. виньетку arrangeGrob.

person alistaire    schedule 29.11.2016
comment
Спасибо Алистер. Ваш первый пример с использованием аргумента grob = по-прежнему заполняется слева направо, а затем сверху вниз, к вашему сведению, но, может быть, вы это знали? Ваш 2-й пример РАБОТАЕТ! Большое вам спасибо - я пытался понять это последние 4 часа, без шуток. - person Bonono; 30.11.2016
comment
Упс. Вы можете добавить as.table = FALSE для заполнения по столбцам; Я отредактирую. - person alistaire; 30.11.2016