Как я могу получить «несбалансированную» сетку ggplots?

С grid.arrange я могу организовать несколько фигур ggplot в сетке, чтобы добиться многострочной фигуры, используя что-то вроде:

 library(ggplot2) library(grid) library(gridExtra) 

генерировать некоторые графики ggplot2, тогда

 plot5 <- grid.arrange(plot4, plot1, heights=c(3/4, 1/4), ncol=1, nrow=2) 

Как я могу получить «неуравновешенную» компоновку 2 col с одним графиком во всем первом столбце и тремя графиками во втором столбце? Я играл с подходом «grid-сетки», пытаясь использовать grid.arrange для построения одной сетки (например, plot5 , выше) против другого сюжета, но получившего:

Ошибка в организацииGrob (…, as.table = as.table, clip = clip, main = main,: input должно быть grobs!

Обновить:

Спасибо за совет. Я просмотрю viewports и grid . Тем временем, благодаря @DWin, функция layOut в layOut « layOut » очень хорошо работала для фигуры компиляции в моем документе Sweave : введите описание изображения здесь

Обновление 2:

Команда arrangeGrob (как предложено @baptiste) также хорошо работает и кажется очень интуитивной – по крайней мере, было легко изменить ширину двух столбцов. Это также имеет преимущество, не требуя пакета `wq ‘.

Например, вот код из моего файла Sweave:

 < 

который производит следующий вывод: введите описание изображения здесь

Кстати, кто-нибудь скажет мне, почему появляется «> NA»?

grid.arrange рисует непосредственно на устройстве; если вы хотите объединить его с другими объектами сетки, вам нужно arrangeGrob , как в

  p = rectGrob() grid.arrange(p, arrangeGrob(p,p,p, heights=c(3/4, 1/4, 1/4), ncol=1), ncol=2) 

Изменить (07/2015): с помощью v> 2.0.0 вы можете использовать аргумент layout_matrix ,

  grid.arrange(p,p,p,p, layout_matrix = cbind(c(1,1,1), c(2,3,4))) 

Я попытался понять это с помощью сетки и подумал, что у меня все получилось, но закончилось неудачей (хотя теперь смотрю на код в функции, которую я цитирую ниже, я вижу, что я был очень близок … 🙂

Пакет ‘wq’ имеет функцию layOut , которая сделает это за вас:

 p1 <- qplot(mpg, wt, data=mtcars) layOut(list(p1, 1:3, 1), # takes three rows and the first column list(p1, 1, 2), # next three are on separate rows list(p1, 2,2), list(p1, 3,2)) 

введите описание изображения здесь

Другой альтернативой является пакет patchwork Томаса Лина Педерсена.

 # install.packages("devtools") # devtools::install_github("thomasp85/patchwork") library(patchwork) 

Создайте некоторые сюжеты.

 p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + facet_grid(rows = vars(gear)) p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec)) p4 <- ggplot(mtcars) + geom_bar(aes(carb)) 

А теперь устраивайте сюжеты.

 p1 + (p2 / p3 / p4) 

введите описание изображения здесь

Стоит упомянуть также пакет multipanelfigure . См. Также этот ответ .

 library(ggplot2) theme_set(theme_bw()) q1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) q2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) q3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec)) q4 <- ggplot(mtcars) + geom_bar(aes(carb)) library(magrittr) library(multipanelfigure) figure1 <- multi_panel_figure(columns = 2, rows = 3, panel_label_type = "upper-roman") figure1 %<>% fill_panel(q1, column = 1, row = 1:3) %<>% fill_panel(q2, column = 2, row = 1) %<>% fill_panel(q3, column = 2, row = 2) %<>% fill_panel(q4, column = 2, row = 3) #> `geom_smooth()` using method = 'loess' and formula 'y ~ x' figure1 

Создано в 2018-07-16 пакетом reprex (v0.2.0.9000).

  • Memory Allocation "Ошибка: не может выделить вектор размера 75.1 Mb"
  • Указание статистически значимой разницы в гистограмме. ИСПОЛЬЗОВАНИЕ R
  • Установка нескольких регрессионных моделей с dplyr
  • Динамически строить вызов для поиска нескольких столбцов
  • Оценить выражение, данное как строка
  • R - упорядочение в коробке
  • Force R прекратить рисовать метки сокращенной оси - например, 1e + 00 в ggplot2
  • Использование get () с функциями замены
  • Как я могу организовать произвольное количество ggplots, используя grid.arrange?
  • Суммируя несколько столбцов с dplyr?
  • Аннотировать значения выше баров (ggplot граненый)
  • Давайте будем гением компьютера.