Получи случайную криптовалюту за регистрацию!

​​Как расположить несколько ggplot2 графиков на одном изображе | R4marketing | канал Алексея Селезнёва | Язык R

​​Как расположить несколько ggplot2 графиков на одном изображении

Для расположения сразу нескольких графиков на одном изображении удобно использовать пакет patchwork. patchwork по сути решает туже проблему, что и gridExtra::grid.arrange() и cowplot::plot_grid(), но имеет более простой синтаксис.

Рассмотрим несколько примеров:

library(ggplot2)
library(patchwork)

# создаём 2 графика
p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))

# располагаем их на одном изображении
p1 + p2

Пример более сложного макета, в котором 3 графика будут располагаться в верхней части изображения, и один в нижней.

p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
p4 <- ggplot(mtcars) + geom_bar(aes(carb))

(p1 | p2 | p3) /
p4

Так же управлять макетом изображения вам позволяет функция plot_layout():

p1 + p2 + p3 + p4 +
plot_layout(ncol = 3)

Аргументы функции plot_layout():
● ncol, nrow - Размеры создаваемой сетки, если оба равны NULL, для установки размеров будет использоваться та же логика, что и при использовании facet_wrap().
● byrow - Аналогично byrow в matrix(). При значении FALSE, графики будут заполнены по столбцам.
● widths, heights - Относительная ширина и высота каждого столбца и строки в сетке. Будет повторяться, чтобы соответствовать размерам сетки.
● guides - Позволяет расположение общей легенды объединяемых графиов, принимает одно из следующих значений: 'collect', 'keep', 'auto'
● tag_level - Автопометка графиков, принимает одно из следующих значений: 'keep', 'new'
● design - Спецификация расположения областей графиков на макете.

Пример работы с аргументом design

p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p3 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl)
p4 <- ggplot(mtcars) + geom_bar(aes(carb))
p5 <- ggplot(mtcars) + geom_violin(aes(cyl, mpg, group = cyl))

# пример 1
design <- c(
area(1, 1, 2),
area(1, 2, 1, 3),
area(2, 3, 3),
area(3, 1, 3, 2),
area(2, 2)
)

p1 + p2 + p3 + p4 + p5 + plot_layout(design = design)

# пример 2
design <- "
122
153
443
"
p1 + p2 + p3 + p4 + p5 + plot_layout(design = design)
Результат работы этого примера вы видите на изображении к посту.

Ссылки:
- сайт пакета patchwork

#заметки_по_R