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



group-telegram.com/R4marketing/994
Create:
Last Update:

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

BY R4marketing | канал Алексея Селезнёва | Язык R




Share with your friend now:
group-telegram.com/R4marketing/994

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

"For Telegram, accountability has always been a problem, which is why it was so popular even before the full-scale war with far-right extremists and terrorists from all over the world," she told AFP from her safe house outside the Ukrainian capital. Recently, Durav wrote on his Telegram channel that users' right to privacy, in light of the war in Ukraine, is "sacred, now more than ever." Telegram users are able to send files of any type up to 2GB each and access them from any device, with no limit on cloud storage, which has made downloading files more popular on the platform. A Russian Telegram channel with over 700,000 followers is spreading disinformation about Russia's invasion of Ukraine under the guise of providing "objective information" and fact-checking fake news. Its influence extends beyond the platform, with major Russian publications, government officials, and journalists citing the page's posts. Apparently upbeat developments in Russia's discussions with Ukraine helped at least temporarily send investors back into risk assets. Russian President Vladimir Putin said during a meeting with his Belarusian counterpart Alexander Lukashenko that there were "certain positive developments" occurring in the talks with Ukraine, according to a transcript of their meeting. Putin added that discussions were happening "almost on a daily basis."
from us


Telegram R4marketing | канал Алексея Селезнёва | Язык R
FROM American