+6  A: 

Short answer: You can't do that. It might make sense with 3 graphs, but what if you had a big lattice of 32 graphs? That would look noisy and bad. GGplot's philosophy is about doing the right thing with a minimum of customization, which means, naturally, that you can't customize things as much as other packages.

Long answer: You could fake it by constructing three separate ggplot objects and combining them. But it's not a very general solution. Here's some code from Hadley's book that assumes you've created ggplot objects a, b, and c. It puts a in the top row, with b and c in the bottom row.

grid.newpage()
pushViewport(viewport(layout=grid.layout(2,2)))
vplayout<-function(x,y)
    viewport(layout.pos.row=x,layout.pos.col=y)
print(a,vp=vplayout(1,1:2))
print(b,vp=vplayout(2,1))
print(c,vp=vplayout(2,2))
Harlan
Yeah I was getting the "you're not supposed to do that" vibe from ggplot. I'm going to try to implement the example you gave. That seems reasonable.
JD Long
Another thing you might try, if you need publication-quality images, is to save the graph to PDF or SVG (if you're not on Windows) format, using ggsave(), and then edit the resulting image using something like Inkscape. You could easily shift the bottom image down and copy the axis up...
Harlan