Especificando a largura do painel ggplot2

Eu tenho dois ggplots na mesma página e gostaria que seus painéis tivessem a mesma largura.

Alguns dados de amostra:

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

Um gráfico abaixo do outro:

 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)) 

Como eu especifico as larguras e posições do painel em cada plot, a fim de torná-los alinhados?

(Eu não quero combinar os charts com lapidação; não é apropriado no meu exemplo do mundo real.)

Solução original:

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

Editar (22/03/13):

Como o ggExtra não existe mais (e muitos componentes internos do ggplot2 foram alterados), é melhor usar as funções de mesclagem (rbind, cbind) fornecidas pelo pacote 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) 

insira a descrição da imagem aqui