Especificando el ancho del panel ggplot2

Tengo dos ggplots en la misma página, y me gustaría que sus paneles tengan el mismo ancho.

Algunos datos de muestra:

dfr1 <- data.frame( time = 1:10, value = runif(10) ) dfr2 <- data.frame( time = 1:10, value = runif(10, 1000, 1001) ) 

Una plot debajo de la otra:

 p1 <- ggplot(dfr1, aes(time, value)) + geom_line() p2 <- ggplot(dfr2, aes(time, value)) + geom_line() grid.newpage() pushViewport(viewport(layout = grid.layout(2, 1))) print(p1, vp = viewport(layout.pos.row = 1, layout.pos.col = 1)) print(p2, vp = viewport(layout.pos.row = 2, layout.pos.col = 1)) 

¿Cómo especifico los anchos y las posiciones del panel en cada plot para alinearlos?

(No quiero combinar las ttwigs con facetas, no es apropiado en mi ejemplo del mundo real).

Solución original:

  # install.packages("ggExtra", repos="http://R-Forge.R-project.org") # library(ggExtra) # align.plots(p1, p2) 

Editar (22/03/13):

Como ggExtra ya no existe (y muchos aspectos internos de ggplot2 han cambiado), es mejor usar las funciones de fusión (rbind, cbind) provistas por el paquete gtable,

 gl = lapply(list(p1,p2), ggplotGrob) library(gtable) g = do.call(rbind, c(gl, size="first")) g$widths = do.call(unit.pmax, lapply(gl, "[[", "widths")) grid.newpage() grid.draw(g) 

enter image description here