Adding this mainly to show some game manipulation / gtable:
library(ggplot2) library(data.table) library(gtable) library(gridExtra) # data for reproducible example dt <- data.table( value = c("East", "West","East", "West", "NY", "LA","NY", "LA"), year = c(2008, 2008, 2013, 2013, 2008, 2008, 2013, 2013), index = c(12, 10, 18, 15, 10, 8, 12 , 14), var = c("Region","Region","Region","Region", "Metro","Metro","Metro","Metro")) # change order or plot facets dt[, var := factor(var, levels=c( "Region", "Metro"))] # plot ggplot(data=dt) + geom_point( aes(x=index, y= factor(year), color=index)) + facet_grid(value + var ~., scales = "free_y", space="free") + theme_bw() + theme(panel.grid=element_blank()) + theme(panel.border=element_blank()) + theme(axis.line.x=element_line()) + theme(axis.line.y=element_line()) -> gg gb <- ggplot_build(gg) gt <- ggplot_gtable(gb)
Here's what it looks like:
gt ## TableGrob (14 x 8) "layout": 24 grobs ## z cells name grob ## 1 0 ( 1-14, 1- 8) background rect[plot.background..rect.5201] ## 2 5 ( 4- 4, 3- 3) axis-l absoluteGrob[GRID.absoluteGrob.5074] ## 3 6 ( 6- 6, 3- 3) axis-l absoluteGrob[GRID.absoluteGrob.5082] ## 4 7 ( 8- 8, 3- 3) axis-l absoluteGrob[GRID.absoluteGrob.5090] ## 5 8 (10-10, 3- 3) axis-l absoluteGrob[GRID.absoluteGrob.5098] ## 6 1 ( 4- 4, 4- 4) panel gTree[GRID.gTree.5155] ## 7 2 ( 6- 6, 4- 4) panel gTree[GRID.gTree.5164] ## 8 3 ( 8- 8, 4- 4) panel gTree[GRID.gTree.5173] ## 9 4 (10-10, 4- 4) panel gTree[GRID.gTree.5182] ## 10 9 ( 4- 4, 5- 5) strip-right absoluteGrob[strip.absoluteGrob.5104] ## 11 10 ( 6- 6, 5- 5) strip-right absoluteGrob[strip.absoluteGrob.5110] ## 12 11 ( 8- 8, 5- 5) strip-right absoluteGrob[strip.absoluteGrob.5116] ## 13 12 (10-10, 5- 5) strip-right absoluteGrob[strip.absoluteGrob.5122] ## 14 13 ( 4- 4, 6- 6) strip-right absoluteGrob[strip.absoluteGrob.5128] ## 15 14 ( 6- 6, 6- 6) strip-right absoluteGrob[strip.absoluteGrob.5134] ## 16 15 ( 8- 8, 6- 6) strip-right absoluteGrob[strip.absoluteGrob.5140] ## 17 16 (10-10, 6- 6) strip-right absoluteGrob[strip.absoluteGrob.5146] ## 18 17 (11-11, 4- 4) axis-b absoluteGrob[GRID.absoluteGrob.5066] ## 19 18 (12-12, 4- 4) xlab titleGrob[axis.title.x..titleGrob.5185] ## 20 19 ( 4-10, 2- 2) ylab titleGrob[axis.title.y..titleGrob.5188] ## 21 20 ( 4-10, 7- 7) guide-box gtable[guide-box] ## 22 21 ( 3- 3, 4- 4) subtitle zeroGrob[plot.subtitle..zeroGrob.5198] ## 23 22 ( 2- 2, 4- 4) title zeroGrob[plot.title..zeroGrob.5197] ## 24 23 (13-13, 4- 4) caption zeroGrob[plot.caption..zeroGrob.5199]
We can easily manipulate these components:

The IMO user approach of labeller and geom_text in the first answer is much more readable and repeatable.