Specifica della larghezza del pannello ggplot2

Ho due ggplot sulla stessa pagina e vorrei che i loro pannelli avessero la stessa larghezza.

Alcuni dati di esempio:

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

Una trama sotto l’altra:

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

Come posso specificare le larghezze e le posizioni del pannello in ogni trama, in modo da renderle allineate?

(Non voglio combinare le trame con la sfaccettatura, non è appropriato nel mio esempio del mondo reale.)

    Soluzione originale:

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

    Modifica (22/03/13):

    Dal momento che ggExtra non esiste più (e molti interni di ggplot2 sono cambiati), è meglio usare le funzioni di fusione (rbind, cbind) fornite dal pacchetto 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) 

    inserisci la descrizione dell'immagine qui