'How can I add a second title in ggplot2 using patchwork?

Suppose I want to merge the following six plots into one plot.

library(ggplot2)
p1 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp))

p2 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp))

p3 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp)) 

p4 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp))

p4 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp))

p5 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp))

p6 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp))

For this I use the package Pachwork:

 library(patchwork)
    
    (p1 | p2  | p2 ) / (p4  | p5  | p6 ) + 
      plot_annotation(title = "Perceptual Domain", tag_levels = 'A') & 
      theme(plot.title = element_text(hjust = 0.5), plot.tag = element_text(size = 15, face = "bold")) 

I want to add a title for the upper three plots and a separate title for the lower three plots.

As you can see in the example I can only add one title but not a second one.

Can someone help me and show me how I can add a second title for the lower three plots?



Solution 1:[1]

One option to achieve your desired result would be to make separate patchworks for the top and the bottom level plots and glue them together by wrapping them inside patchwork::wrap_elements. Note that this approach requires some "manual" work to set the tag levels for the bottom level plot:

library(ggplot2)
library(patchwork)

p1 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp))

p11 <- (p1 | p1  | p1 ) +
  plot_annotation(title = "Title 1", tag_levels = "A") & 
  theme(plot.title = element_text(hjust = 0.5), plot.tag = element_text(size = 15, face = "bold"))

p12 <- (p1 | p1  | p1 ) +
  plot_annotation(title = "Title 2", tag_levels = list(c("D", "E", "F"))) & 
  theme(plot.title = element_text(hjust = 0.5), plot.tag = element_text(size = 15, face = "bold"))

wrap_elements(p11) / wrap_elements(p12)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1