This draws three separate graphs, with y breaks set to 0, 0.5 * max (value) and max (value). The three graphs are combined using the gtable rbind function, then drawn.
v1 <- sample(rnorm(100, 10, 1), 30) v2 <- sample(rnorm(100, 20, 2), 30) v3 <- sample(rnorm(100, 50, 5), 30) fac1 <- factor(rep(rep(c("f1", "f2", "f3"), each = 10), 3)) library(reshape2) library(ggplot2) library(grid) library(gridExtra) df1 <- melt(data.frame(fac1, v1, v2, v3)) # Draw the three charts, each with a facet strip. # But drop off the bottom margin material dfp1 = subset(df1, variable == "v1") p1 = ggplot(dfp1, aes(fac1, value, group = variable)) + geom_point() + facet_grid(variable ~ .) + scale_y_continuous(limits = c(0, ceiling(max(dfp1$value))), breaks = c(0, ceiling(max(dfp1$value))/2, ceiling(max(dfp1$value)))) + theme_bw() g1 = ggplotGrob(p1) pos = g1$layout[grepl("xlab-b|axis-b", g1$layout$name), "t"] g1 = g1[-pos, ] # Drop off the bottom margin material dfp2 = subset(df1, variable == "v2") p2 = ggplot(dfp2, aes(fac1, value, group = variable)) + geom_point() + facet_grid(variable ~ .) + scale_y_continuous(limits = c(0, ceiling(max(dfp2$value))), breaks = c(0, ceiling(max(dfp2$value))/2, ceiling(max(dfp2$value)))) + theme_bw() g2 = ggplotGrob(p2) g2 = g2[-pos,] dfp3 = subset(df1, variable == "v3") p3 = ggplot(dfp3, aes(fac1, value, group = variable)) + geom_point() + facet_grid(variable ~ .) + scale_y_continuous(limits = c(0, ceiling(max(dfp3$value))), breaks = c(0, ceiling(max(dfp3$value))/2, ceiling(max(dfp3$value)))) + theme_bw() g3 = ggplotGrob(p3) # Combine the three gtables g = rbind.gtable(g1, g2, size = "max") g = rbind.gtable(g, g3, size = "max") # Draw the plot grid.newpage() grid.draw(g)
