Search code examples
rggplot2facet

Extract single plot from ggplot with facet_grid


I want to produce some plots using ggplot and facet_grid and save the plot as an object. My problem is that I also want to save each subgroup (i.e. each facet) as an object separately. My question is now if you can extract a single facet from facet_grid and save it as an object? Here is some simple code:

library(ggplot2)

ggplot(data = mtcars, aes(x = disp, y = mpg)) +
  geom_point() +
  facet_grid(. ~ am)

Now I'd like to produce two objects - one for am=0 and one for am=1.


Solution

  • I'm not sure why you wouldn't use subsetting, but you can extract individual facets from a facet grid.

    library(ggplot2)
    library(grid)
    library(gtable)
    
    p1 = ggplot(data = mtcars, aes(x = disp, y = mpg)) +
      geom_point() +
      facet_grid(. ~ am)
    
    
    g1 = ggplotGrob(p1)
    
    
    # Rows and columns can be dropped from the layout.
    
    # To show the layout:
    gtable_show_layout(g1)
    
    # Which columns (and/or rows) to drop?
    # In this case drop columns 5 and 6 to leave am = 0 plot
    # Drop columns 4 and 5 to leave am = 1 plot
    
    # am = 0 plot
    g1_am0 = g1[,-c(5,6)]
    
    grid.newpage()
    grid.draw(g1_am0)
    
    
    # am = 1 plot
    g1_am1 = g1[,-c(4,5)]
    
    grid.newpage()
    grid.draw(g1_am1)