Как расположить несколько 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