Search code examples
rggplot2facet-grid

Placing labels outside of the strips in facet_grid


I wonder that how can we place labels left or right side of the facet_grid strips.

As a reproducible example I would like to start with this example

library(ggplot2)
    ggplot(mtcars, aes("", hp)) + 
      geom_boxplot(width=0.7, position=position_dodge(0.7)) + 
      theme_bw() +
      facet_grid(. ~ vs + am + carb,switch = 'both',labeller = label_both) +
      theme(panel.spacing=unit(0.2,"lines"),
            strip.background=element_rect(color="grey30", fill="grey90"),
            panel.border=element_rect(color="grey90"),
            axis.ticks.x=element_blank())+
            #strip.placement="outside") +
      labs(x="")

enter image description here

The plot which I look for;

enter image description here


Solution

  • you can always add the titles manually to the gtable,

    enter image description here

    g <- ggplotGrob(p)
    
    library(gtable)
    library(grid)
    library(gridExtra)
    pos <- subset(g$layout, grepl("strip",name))
    titles <- tableGrob(c("vs","am","carb"), theme = ttheme_minimal(9))
    titles$heights <- unit(rep(1,3), "null")
    g$widths[ncol(g)] <- sum(titles$widths)
    g <- gtable_add_grob(g, titles, t=unique(pos$t), l = ncol(g)) 
    grid.newpage()
    grid.draw(g)