Remove facet_wrap labels completely
For ggplot v2.1.0 or higher, use element_blank()
to remove unwanted elements:
library(MASS) # To get the datalibrary(ggplot2)qplot( week, y, data = bacteria, group = ID, geom = c('point', 'line'), xlab = '', ylab = '') + facet_wrap(~ ID) + theme( strip.background = element_blank(), strip.text.x = element_blank())
In this case, the element you're trying to remove is called strip
.
Alternative using ggplot grob layout
In older versions of ggplot
(before v2.1.0), the strip text occupies rows in the gtable layout.
element_blank
removes the text and the background, but it does not remove the space that the row occupied.
This code removes those rows from the layout:
library(ggplot2)library(grid)p <- qplot( week, y, data = bacteria, group = ID, geom = c('point', 'line'), xlab = '', ylab = '') + facet_wrap(~ ID)# Get the ggplot grobgt <- ggplotGrob(p)# Locate the tops of the plot panelspanels <- grep("panel", gt$layout$name)top <- unique(gt$layout$t[panels])# Remove the rows immediately above the plot panelgt = gt[-(top-1), ]# Draw itgrid.newpage()grid.draw(gt)
I'm using ggplot2 version 1 and the commands required have changed. Instead of
ggplot() ... + opts(strip.background = theme_blank(), strip.text.x = theme_blank())
you now use
ggplot() ... + theme(strip.background = element_blank(), strip.text = element_blank())
For more detail see http://docs.ggplot2.org/current/theme.html
Sandy's updated answer seems good but, possibly has been rendered obsolete by updates to ggplot? From what I can tell the following code (a simplified version of Sandy's original answer) reproduces Sean's original graph without any extra space:
library(ggplot2)library(grid)qplot(week,y,data=bacteria,group=ID, geom=c('point','line'), xlab='', ylab='') + facet_wrap(~ID) + theme(strip.text.x = element_blank())
I am using ggplot 2.0.0.