Un aspetto negativo delle soluzioni basate su grid.arrange
è che rendono difficile etichettare i grafici con lettere (A, B, ecc.), Come richiedono la maggior parte delle riviste.
Ho scritto il pacchetto cowplot per risolvere questo (e pochi altri) problemi, in particolare la funzione plot_grid()
:
library(cowplot)
iris1 <- ggplot(iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot() + theme_bw()
iris2 <- ggplot(iris, aes(x = Sepal.Length, fill = Species)) +
geom_density(alpha = 0.7) + theme_bw() +
theme(legend.position = c(0.8, 0.8))
plot_grid(iris1, iris2, labels = "AUTO")
L'oggetto che plot_grid()
ritorna è un altro oggetto ggplot2 e puoi salvarlo ggsave()
come al solito:
p <- plot_grid(iris1, iris2, labels = "AUTO")
ggsave("plot.pdf", p)
In alternativa, è possibile utilizzare la funzione cowplot save_plot()
, che è un involucro sottile ggsave()
che facilita il raggiungimento delle dimensioni corrette per i grafici combinati, ad esempio:
p <- plot_grid(iris1, iris2, labels = "AUTO")
save_plot("plot.pdf", p, ncol = 2)
(L' ncol = 2
argomento dice save_plot()
che ci sono due grafici affiancati e save_plot()
rende l'immagine salvata due volte più larga.)
Per una descrizione più approfondita di come disporre i grafici in una griglia, vedere questa vignetta. C'è anche una vignetta che spiega come creare grafici con a legenda condivisa.
Un frequente punto di confusione è che il pacchetto cowplot modifica il tema predefinito di ggplot2. Il pacchetto si comporta in questo modo perché è stato originariamente scritto per usi di laboratorio interni e non utilizziamo mai il tema predefinito. Se ciò causa problemi, è possibile utilizzare uno dei seguenti tre approcci per aggirarli:
1. Imposta il tema manualmente per ogni trama. Penso che sia buona norma specificare sempre un tema particolare per ogni trama, proprio come ho fatto con+ theme_bw()
nell'esempio sopra. Se si specifica un tema particolare, il tema predefinito non ha importanza.
2. Ripristina il tema predefinito al valore predefinito di ggplot2. Puoi farlo con una riga di codice:
theme_set(theme_gray())
3. Chiamare le funzioni cowplot senza collegare il pacchetto. Non è inoltre possibile chiamare library(cowplot)
o require(cowplot)
e invece chiamare le funzioni cowplot anteponendo cowplot::
. Ad esempio, l'esempio sopra usando il tema predefinito ggplot2 diventerebbe:
## Commented out, we don't call this
# library(cowplot)
iris1 <- ggplot(iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot()
iris2 <- ggplot(iris, aes(x = Sepal.Length, fill = Species)) +
geom_density(alpha = 0.7) +
theme(legend.position = c(0.8, 0.8))
cowplot::plot_grid(iris1, iris2, labels = "AUTO")
aggiornamenti:
- A partire da cowplot 1.0, il tema predefinito di ggplot2 non viene più modificato.
- A partire da ggplot2 3.0.0, i grafici possono essere etichettati direttamente, vedere ad esempio qui.