добавить заголовки строк и столбцов с помощью ggarrange - PullRequest
2 голосов
/ 22 февраля 2020

У меня есть список ggplots, которые могут быть слишком сложными, чтобы упорядочить их с помощью facet_wrap. Все сюжеты должны иметь одинаковую легенду и должны быть расположены в сетке. Каждый столбец сетки нуждается в отдельном заголовке, также каждая строка сетки нуждается в различном заголовке.
Абсурдно простой пример:

library(ggplot2)
library(ggpubr)

plot1<- ggplot() + geom_point(aes(x=1, y=1, col="a"))
plot2<- ggplot() + geom_point(aes(x=1, y=1, col="a"))
plot3<- ggplot() + geom_point(aes(x=1, y=1, col="a"))
plot4<- ggplot() + geom_point(aes(x=1, y=1, col="a"))

plotlist<- list(plot1, plot2, plot3, plot4)

ggarrange(plotlist = plotlist, ncol = 2, nrow = 2, common.legend = TRUE, legend="bottom")

Это производит все необходимое, кроме заголовков столбцов и строк, и annotate_figure добавляет только глобальный заголовок к рисунку. Желаемый результат должен выглядеть следующим образом:

ggarrange with row and column titles

1 Ответ

1 голос
/ 22 февраля 2020

Я предпочитаю пакет patchwork. Управлять макетом легко. Названия немного хитры. Пэчворк использует лабораторные работы с каждого графика, так что вы можете добавить заголовки графиков на верхние графики и, возможно, добавить строку к метке y на графиках слева.

Возможно, проще создать заголовки в виде сюжета и добавить их в пэчворк. Вы можете легко настроить свой макет, как , как описано в лоскутной виньетке

library(ggplot2)
library(patchwork)

plot1<-plot2<-plot3<-plot4<- ggplot() + geom_point(aes(x=1, y=1, col="a"))

row1 <- ggplot() + annotate(geom = 'text', x=1, y=1, label="row 1 title", angle = 90) + theme_void() 

row2 <- ggplot() + annotate(geom = 'text', x=1, y=1, label="row 2 title", angle = 90) + theme_void() 

col1 <- ggplot() + annotate(geom = 'text', x=1, y=1, label="col 1 title") + theme_void() 

col2 <- ggplot() + annotate(geom = 'text', x=1, y=1, label="col 2 title") + theme_void() 

layoutplot <- "
#cccddd
aeeefff
aeeefff
bggghhh
bggghhh
"

plotlist <- list(a = row1, b = row2, c = col1, d = col2, e= plot1, f=plot2, g=plot3, h=plot4)

wrap_plots(plotlist, guides = 'collect', design = layoutplot)

Создано в 2020-02-22 с помощью представьте пакет (v0.3.0)

...