Da quando mi sono aggiornato a ggplot2 2.0.0, non riesco ad organizzare i diagrammi in modo propizio utilizzando grigliaExtra. Il problema è che i grafici sfaccettati verranno compressi mentre altri si espanderanno. Le larghezze sono sostanzialmente incasinate. Voglio disporli simile al modo in cui questi singoli appezzamenti sfaccettatura sono: left align two graph edges (ggplot)Disporre la larghezza del grafico comune con gplplat 2.0.0 sfaccettato e grigliaExtra
ho messo un codice riproducibili
library(grid) # for unit.pmax()
library(gridExtra)
plot.iris <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
geom_point() +
facet_grid(. ~ Species) +
stat_smooth(method = "lm")
plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) +
geom_point(size=2.5)
g.iris <- ggplotGrob(plot.iris) # convert to gtable
g.mpg <- ggplotGrob(plot.mpg) # convert to gtable
iris.widths <- g.iris$widths # extract the first three widths,
mpg.widths <- g.mpg$widths # same for mpg plot
max.widths <- unit.pmax(iris.widths, mpg.widths)
g.iris$widths <- max.widths # assign max. widths to iris gtable
g.mpg$widths <- max.widths # assign max widths to mpg gtable
grid.arrange(g.iris,g.mpg,ncol=1)
Come vedrete, il grafico in alto, il primo aspetto è espanso mentre gli altri 2 vengono compressi a destra. Il grafico inferiore non copre tutta la larghezza.
Potrebbe essere che la nuova versione di ggplot2 stia scherzando con le larghezze di gtable?
Qualcuno sa una soluzione?
La ringrazio molto
EDIT: Aggiunto foto di grafico
Sto cercando qualcosa di simile:
g.iris $ larghezze e g.iris $ larghezze sono lunghezze diverse quindi (penso) voi non potete applicare direttamente unità.pmax attraverso di essi. Quindi prova a applicarlo alle larghezze per la parte a sinistra ea destra dei pannelli. 'max.widths <- unit.pmax (iris.widths [1: 3], mpg.widths [1: 3]); g.iris $ width [1: 3] <- max.widths; g.mpg $ width [1: 3] <- max.widths; g.iris $ width [9] <- unit.c (g.mpg $ width [5] + g.mpg $ widths [6]) ' – user20650
Grazie per il suggerimento! Ho anche provato a inserire le larghezze, ma non ha funzionato neanche. l'ultima parte del codice non l'ho vista prima, ma quando lo applico, ottengo un errore da grid.arrange (e grid.draw) 'Errore nell'unità (widths, default.units): (elenco) l'oggetto non può essere forzato a digitare 'double''. Ho anche provato a cercare cosa significa ogni numero in larghezza Gtable, ma non sono riuscito a ottenere quelle informazioni –
Per il tuo esempio sopra, dovrebbe funzionare senza errori - fa per me (se è il modo migliore per farlo è un altro domanda;)). Ho sostituito le tre righe 'max.widths <- unit.pmax (iris.widths, mpg.widths); ; g.iris $ width <- max.widths; g.mpg $ width <- max.widths' con le quattro righe nel commento sopra. – user20650