require(ggplot2)
require(grid)
#####
a <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + geom_point()
b <- ggplot(diamonds, aes(carat, depth, colour = color)) + geom_point()
c <- ggplot(diamonds, aes(carat, depth, colour = color)) + geom_point() +
facet_grid(.~color,scale = "free")
a

b

c

grid.newpage()
pushViewport(viewport(layout = grid.layout(2,2)))
vplayout <- function(x,y){
viewport(layout.pos.row = x, layout.pos.col = y)
}
print(c, vp = vplayout(1,1:2))
print(b, vp = vplayout(2,1))
print(a, vp = vplayout(2,2))

#dev.off()
LS0tCnRpdGxlOiAiZ2dwbG90MiBmb3Igc2V2ZXJhbCBmaWd1cmUgb24gb25lIHBhZ2UiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCgoKCmBgYHtyLCBmaWcuYWxpZ249J2NlbnRlcid9CnJlcXVpcmUoZ2dwbG90MikKcmVxdWlyZShncmlkKQojIyMjIwphIDwtIGdncGxvdChtdGNhcnMsIGFlcyhtcGcsIHd0LCBjb2xvdXIgPSBmYWN0b3IoY3lsKSkpICsgZ2VvbV9wb2ludCgpCmIgPC0gZ2dwbG90KGRpYW1vbmRzLCBhZXMoY2FyYXQsIGRlcHRoLCBjb2xvdXIgPSBjb2xvcikpICsgZ2VvbV9wb2ludCgpCmMgPC0gZ2dwbG90KGRpYW1vbmRzLCBhZXMoY2FyYXQsIGRlcHRoLCBjb2xvdXIgPSBjb2xvcikpICsgZ2VvbV9wb2ludCgpICsgCiAgZmFjZXRfZ3JpZCgufmNvbG9yLHNjYWxlID0gImZyZWUiKSAKYQpiCmMKYGBgCgpgYGB7cn0KZ3JpZC5uZXdwYWdlKCkgCnB1c2hWaWV3cG9ydCh2aWV3cG9ydChsYXlvdXQgPSBncmlkLmxheW91dCgyLDIpKSkgCnZwbGF5b3V0IDwtIGZ1bmN0aW9uKHgseSl7CiAgdmlld3BvcnQobGF5b3V0LnBvcy5yb3cgPSB4LCBsYXlvdXQucG9zLmNvbCA9IHkpCn0KcHJpbnQoYywgdnAgPSB2cGxheW91dCgxLDE6MikpICAgCnByaW50KGIsIHZwID0gdnBsYXlvdXQoMiwxKSkgICAKcHJpbnQoYSwgdnAgPSB2cGxheW91dCgyLDIpKSAgIAojZGV2Lm9mZigpICAKYGBgCg==