Especifique larguras e alturas de plotagens com grid.arrange

Tenho três parcelas e tento combiná-las com grid.arrange. O último gráfico deve ter uma altura menor que os dois primeiros gráficos e todos os gráficos devem ter a mesma largura.

Um exemplo de trabalho:

p1 <- qplot(mpg, wt, data=mtcars)
p2 <- p1
p3 <- p1 + theme(axis.text.y=element_blank(), axis.title.y=element_blank())

grid.arrange(arrangeGrob(p1,p2, ncol=1, nrow=2),
         arrangeGrob(p3, ncol=1, nrow=1), heights=c(4,1)) 

Aqui, o último gráfico tem uma largura maior que os dois primeiros. Nos meus dados reais, mesmo que eu mantenha o texto e o título no eixo y, ainda tenho uma largura diferente para o terceiro gráfico.

Eu tentei adicionar "larguras":

 grid.arrange(arrangeGrob(p1,p2, ncol=1, nrow=2),
         arrangeGrob(p3, ncol=1, nrow=1), heights=c(4,1), widths=c(2,1))

Mas ele se transforma em um gráfico de duas colunas ...

Eu também tentei outro código:

p1 <- ggplotGrob(p1)
p2 <- ggplotGrob(p2)
p3 <- ggplotGrob(p3)
# 
stripT <- subset(p2$layout, grepl("spacer", p2$layout$name))
p3 <- p3[-stripT$t, ]

grid.draw(rbind(p1, p2, p3, size = "first")) 

Tenho as mesmas larguras, mas agora não sei como alterar as alturas ...

Bem, alguém pode me ajudar a combinar os aspectos de altura e largura para um gráfico final?

questionAnswers(2)

yourAnswerToTheQuestion