Una desventaja de las soluciones basadas en ellas grid.arrange
es que dificultan etiquetar las parcelas con letras (A, B, etc.), como lo requieren la mayoría de las revistas.
Escribí el paquete cowplot para resolver este (y algunos otros) problemas, específicamente la función 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")
El objeto que plot_grid()
regresa es otro objeto ggplot2, y puede guardarlo ggsave()
como de costumbre:
p <- plot_grid(iris1, iris2, labels = "AUTO")
ggsave("plot.pdf", p)
Alternativamente, puede usar la función de diagrama de trama save_plot()
, que es una envoltura delgada ggsave()
que facilita obtener las dimensiones correctas para diagramas combinados, por ejemplo:
p <- plot_grid(iris1, iris2, labels = "AUTO")
save_plot("plot.pdf", p, ncol = 2)
(El ncol = 2
argumento dice save_plot()
que hay dos trazados uno al lado del otro y save_plot()
hace que la imagen guardada sea dos veces más ancha).
Para obtener una descripción más detallada de cómo organizar las parcelas en una cuadrícula, vea esta viñeta. También hay una viñeta que explica cómo hacer tramas con una leyenda compartida.
Un punto frecuente de confusión es que el paquete cowplot cambia el tema predeterminado ggplot2. El paquete se comporta de esa manera porque fue escrito originalmente para usos internos de laboratorio, y nunca usamos el tema predeterminado. Si esto causa problemas, puede usar uno de los siguientes tres enfoques para solucionarlos:
1. Establezca el tema manualmente para cada trama. Creo que es una buena práctica especificar siempre un tema en particular para cada argumento, tal como lo hice con+ theme_bw()
en el ejemplo anterior. Si especifica un tema en particular, el tema predeterminado no importa.
2. Revierta el tema predeterminado nuevamente al valor predeterminado de ggplot2. Puede hacer esto con una línea de código:
theme_set(theme_gray())
3. Llame a las funciones de la trama sin adjuntar el paquete. Tampoco puede invocar library(cowplot)
o, require(cowplot)
y en su lugar, llamar a funciones de diagrama de trama, anteponiendo cowplot::
. Por ejemplo, el ejemplo anterior que usa el tema predeterminado ggplot2 sería:
## 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")
Actualizaciones:
- A partir de cowplot 1.0, el tema predeterminado ggplot2 ya no se cambia.
- A partir de ggplot2 3.0.0, las parcelas se pueden etiquetar directamente, ver, por ejemplo, aquí.