проблема с использованием пэчворка с gridExtra для сохранения графиков на нескольких страницах

У меня есть список объектов, созданных с помощью patchwork. Я хотел бы сохранить каждый элемент этого списка как отдельную страницу в одном PDF-файле.

Если делать это для обычных объектов ggplot2, я бы объединил графики, используя gridExtra::marrangeGrob(), в соответствии с решением, приведенным здесь. Мне нравится этот подход, потому что он аккуратный, а вывод включает номера страниц.

Однако я не могу заставить этот подход работать с patchwork. Вместо того, чтобы печатать весь «составной» сюжет на каждой странице, он показывает только один из элементов сюжета. MWE приведен ниже.

library(ggplot2)
library(patchwork)
library(gridExtra)

# dummy plots
p1 <- ggplot(mtcars, aes(mpg, disp)) + geom_point()
p2 <- ggplot(mtcars, aes(mpg, disp)) + geom_line()

# create plot 'composites' using `patchwork` and combine into list
# elements duplicated for simplicity
plot_list <- list(
  wrap_plots(p1, p2),
  wrap_plots(p1, p2)
)

# attempt to export with separate page for each list element
# expect to produce a PDF with two pages, both of which show p1 adjacent to p2
plot_list %>%
  marrangeGrob(nrow = 1, ncol = 1) %>% # no combination of nrow and ncol seems to work
  ggsave(filename = "plots.pdf")

Что я здесь делаю неправильно? Объединение patchwork с gridExtra — глупая идея? Если да, то какая альтернатива лучше?


person pyg    schedule 13.05.2021    source источник
comment
Кажется, он работает с cowplot::plot_grid вместо wrap_plots, но я не уверен, что это достаточно гибко для вас.   -  person slamballais    schedule 13.05.2021
comment
Что-то вроде этого работает? pdf("myplots.pdf") for (i in 1:2){ plot(plots_for_page[i]) } dev.off()   -  person Josh    schedule 13.05.2021