rggplot2gridextrar-gridggpubr

How To Edit Common Legend Title In ggarrange?


How do I edit a common legend title (make it bold font and enlarge the font size) using ggarrange?

Based on the six plots I have (p1 to p6), I thought the following would work:

p6 <-  p6 + theme(legend.title = element_text(size = 15, face = "bold")

The below ggarrange was used to combine the six plots:

p <- ggarrange(p1, p2, p3, p4, p5, p6,
          common.legend = TRUE, 
          legend = "bottom", 
          labels = c("1", "2", "3", "4", "5", "6"),
          # font.label = list(size = 10, color = "green"),
          nrow = 2, ncol = 4
          )

However, this does not change the common legend at all.


Solution

  • You can extract the legend from your plot of interest and then arrange that legend alongside of your plots.

    #libraries:
    
    library(ggplot2)
    library(ggpubr)
    library(gridExtra)
    library(grid)
    
    #example plots:
    
    p1 <- ggplot(mtcars) + 
            geom_point(aes(x=mpg, y=qsec, color = factor(cyl)))
    
    p2 <- ggplot(mtcars) + 
            geom_point(aes(x=mpg, y=4*drat, color = factor(cyl))) + 
            theme(legend.title = element_text(size = 15, face = "bold"),
                  legend.position="bottom")
    
    #function to extract the legend of a ggplot; source:
    #https://github.com/hadley/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs
    
    get_legend<-function(a.gplot){
      tmp <- ggplot_gtable(ggplot_build(a.gplot))
      leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
      legend <- tmp$grobs[[leg]]
      return(legend)}
    
    #arranging the legend and plots in a grid:
    
    p2_legend <- get_legend(p2)
    
    grid.arrange(arrangeGrob(p1 + theme(legend.position="none"), 
                             p2 + theme(legend.position="none"), nrow=2), 
                 p2_legend, 
                 nrow=2,heights=c(10, 1))