Эта статья шаг за шагом покажет, как совместить несколько ggplot-графиков на одной или нескольких иллюстрациях, с помощью вспомогательных функций, доступных в пакетах R ggpubr, cowplot и gridExtra. Также опишем, как экспортировать полученные графики в файл.
ggarrange()
для изменения расположения графиков по строкам или столбцам.ggarrange(sp, # Первая строка с диаграммой разброса
ggarrange(bxp, dp, ncol = 2, labels = c("B", "C")), # Вторая строка с диаграммой рассеивания и точечной диаграммой
nrow = 2,
labels = "A" # Метки диаграммы разброса
)
ggdraw() + draw_plot() + draw_plot_label()
.ggdraw()
draw_plot(plot, x = 0, y = 0, width = 1, height = 1)
plot
: график для размещения (ggplot2 или gtable)x, y
: координаты x/y левого нижнего угла графикаwidth, height
: ширина и высота графикаdraw_plot_label(label, x = 0, y = 1, size = 16, ...)
label
: вектор метокx, y
: вектор с х/у координатами каждой метки соответственноsize
: размер шрифта меткиlibrary("cowplot")
ggdraw() +
draw_plot(bxp, x = 0, y = .5, width = .5, height = .5) +
draw_plot(dp, x = .5, y = .5, width = .5, height = .5) +
draw_plot(bp, x = 0, y = 0, width = 1, height = 0.5) +
draw_plot_label(label = c("A", "B", "C"), size = 15,
x = c(0, 0.5, 0), y = c(1, 1, 0.5))
arrangeGrop()
[в gridExtra] помогает изменить расположение графиков по строкам или столбцам.library("gridExtra")
grid.arrange(sp, # Первая строка с одним графиком на две колонки
arrangeGrob(bxp, dp, ncol = 2),# Вторая строка с двумя графиками в двух колонках
nrow = 2) # Количество строк
grid.arrange()
можно также использовать аргумент layout_matrix
для создания сложного взаимного расположения графиков.layout_matrix
— матрица 2х2 (2 строки и 2 столбца). Первая строка — все единицы, там, где первый график, занимающий две колонки; вторая строка содержит графики 2 и 3, каждый из которых занимает свою колонку.grid.arrange(bp, # столбчатая диаграмма на две колонки
bxp, sp, # диаграммы рассеивания и разброса
ncol = 2, nrow = 2,
layout_matrix = rbind(c(1,1), c(2,3)))
grid.arrange()
, используя вспомогательную функцию draw_plot_label()
[в cowplot].grid.arrange()
или arrangeGrob()
(тип gtable), сначала нужно преобразовать их в тип ggplot с помощью функции as_ggplot()
[в ggpubr]. После можно применять к ним фунцию draw_plot_label()
[в cowplot].library("gridExtra")
library("cowplot")
# Упорядочиваем графики с arrangeGrob
# возвращает тип gtable (gt)
gt <- arrangeGrob(bp, # столбчатая диаграмма на две колонки
bxp, sp, # диаграммы рассеивания и разброса
ncol = 2, nrow = 2,
layout_matrix = rbind(c(1,1), c(2,3)))
# Добавляем метки к упорядоченным графикам
p <- as_ggplot(gt) + # преобразуем в ggplot
draw_plot_label(label = c("A", "B", "C"), size = 15,
x = c(0, 0, 0.5), y = c(1, 0.5, 0.5)) # Добавляем метки
p
arrangeGrob()
вместо grid.arrange()
. Основное отличие этих двух функций состоит в том, что grid.arrange()
автоматически выводит упорядоченные графики. Поскольку мы хотели добавить аннотацию к графикам до того, как их нарисовать, предпочтительно в таком случае использовать функцию arrangeGrob()
.grid.layout()
. Он также предоставляет вспомогательную функцию viewport()
для задания региона, или области видимости. Функция print()
применяется для размещения графиков в заданном регионе.grid.newpage()
library(grid)
# Перейти на новую страницу
grid.newpage()
# Создать расположение: nrow = 3, ncol = 2
pushViewport(viewport(layout = grid.layout(nrow = 3, ncol = 2)))
# Вспомогательная функция для задания области в расположении
define_region <- function(row, col){
viewport(layout.pos.row = row, layout.pos.col = col)
}
# Упорядочить графики
print(sp, vp = define_region(row = 1, col = 1:2)) # Расположить в двух колонках
print(bxp, vp = define_region(row = 2, col = 1))
print(dp, vp = define_region(row = 2, col = 2))
print(bp + rremove("x.text"), vp = define_region(row = 3, col = 1:2))
ggarrange()
[в ggpubr] с такими аргументами:common.legend = TRUE
: сделать общую легендуlegend
: задать положение легенды. Разрешенное значение — одно из c(“top”, “bottom”, “left”, “right”)ggarrange(bxp, dp, labels = c("A", "B"),
common.legend = TRUE, legend = "bottom")
# Диаграмма разброса, цвет по группе ("Species")
sp <- ggscatter(iris, x = "Sepal.Length", y = "Sepal.Width",
color = "Species", palette = "jco",
size = 3, alpha = 0.6)+
border()
# График плотности безусловного распределения по x (панель сверху) и по y (панель справа)
xplot <- ggdensity(iris, "Sepal.Length", fill = "Species",
palette = "jco")
yplot <- ggdensity(iris, "Sepal.Width", fill = "Species",
palette = "jco")+
rotate()
# Почистить графики
yplot <- yplot + clean_theme()
xplot <- xplot + clean_theme()
# Упорядочить графики
ggarrange(xplot, NULL, sp, yplot,
ncol = 2, nrow = 2, align = "hv",
widths = c(2, 1), heights = c(1, 2),
common.legend = TRUE)
К сожалению, не доступен сервер mySQL