5

I'm trying to save plots over multiple pdf plots with one overall legend per page. I'm wondering is there a neat way to use ggsave and ggpubr::ggarrange to do this? Changing nrow ncol within ggarrange only changes the setup for one page and forces all plots to be on the same page (not over a few pages).

library(ggplot2)
library(ggpubr)
plot_f <- function(df, xx) {
  df %>% 
    filter(carb == xx) %>% 
    ggplot() + 
    geom_line(aes(x = disp, y = hp, colour = "darkblue" )) +
    geom_line(aes(x = disp, y = qsec, colour = "red")) +
    scale_color_discrete(name = "Y series", labels = c("Y2", "Y1"))

}

dd <- unique(mtcars$carb)

list_plots <- map(dd, function(x) {
  plot_f(mtcars, x)
})

#WORKS this saves plots all on the same page
ggsave("test.pdf", ggpubr::ggarrange(plotlist =  list_plots, # list of plots
                                     labels = "AUTO", # labels
                                     common.legend = T, # COMMON LEGEND
                                     legend = "bottom", # legend position
                                     align = "hv", # Align them both, horizontal and vertical
                                     nrow = 6),
       height = 9,
       width = 12)

The following throws an error because 2x2 is less than the total number of plots:

ggsave("test.pdf", ggpubr::ggarrange(plotlist =  list_plots, # list of plots
                                     labels = "AUTO", # labels
                                     common.legend = T, # COMMON LEGEND
                                     legend = "bottom", # legend position
                                     align = "hv", # Align them both, horizontal and vertical
                                     nrow = 2, ncol = 2),
       height = 9, 
       width = 12)

Error in UseMethod("grid.draw") : 
  no applicable method for 'grid.draw' applied to an object of class "c('list', 'ggarrange')"

I would like a flexible approach to supply various nrow ncol values, similar to marrangeGrob function in the gridExtra package, e.g. nrow = 2 ncol = 2. I know cowplot does something similar but I like the ease that an overall legend can be added with ggpubr using common.legend = T.

Thanks

user63230
  • 4,095
  • 21
  • 43
  • 1
    Not sure if that helps but it might be worth to try `ggforce::facet_wrap_paginate`, see https://ggforce.data-imaginist.com/reference/facet_wrap_paginate.html – markus Jun 10 '20 at 14:40
  • thanks for the link but its not exactly what I was after in this case – user63230 Jun 11 '20 at 11:49

0 Answers0