Un inconvénient des solutions basées sur le grid.arrange
fait qu'elles rendent difficile l'étiquetage des parcelles avec des lettres (A, B, etc.), comme la plupart des revues l'exigent.
J'ai écrit le package cowplot pour résoudre ce problème (et quelques autres), en particulier la fonction 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'objet qui plot_grid()
retourne est un autre objet ggplot2, et vous pouvez l'enregistrer avec ggsave()
comme d'habitude:
p <- plot_grid(iris1, iris2, labels = "AUTO")
ggsave("plot.pdf", p)
Alternativement, vous pouvez utiliser la fonction cowplot save_plot()
, qui est une fine enveloppe autour ggsave()
qui permet d'obtenir facilement les bonnes dimensions pour les parcelles combinées, par exemple:
p <- plot_grid(iris1, iris2, labels = "AUTO")
save_plot("plot.pdf", p, ncol = 2)
(L' ncol = 2
argument indique save_plot()
qu'il y a deux tracés côte à côte et save_plot()
rend l'image enregistrée deux fois plus large.)
Pour une description plus approfondie de la façon d'organiser les tracés dans une grille, consultez cette vignette. Il existe également une vignette expliquant comment créer des tracés avec une légende partagée.
Un point de confusion fréquent est que le package cowplot change le thème ggplot2 par défaut. Le package se comporte de cette façon car il a été initialement écrit pour des utilisations en laboratoire interne, et nous n'utilisons jamais le thème par défaut. Si cela pose problème, vous pouvez utiliser l'une des trois approches suivantes pour les contourner:
1. Définissez le thème manuellement pour chaque intrigue. Je pense que c'est une bonne pratique de toujours spécifier un thème particulier pour chaque intrigue, comme je l'ai fait avec + theme_bw()
dans l'exemple ci-dessus. Si vous spécifiez un thème particulier, le thème par défaut n'a pas d'importance.
2. Rétablissez le thème par défaut à la valeur par défaut ggplot2. Vous pouvez le faire avec une seule ligne de code:
theme_set(theme_gray())
3. Appelez les fonctions cowplot sans attacher le paquet. Vous ne pouvez pas non plus appeler library(cowplot)
ou require(cowplot)
et appeler à la place des fonctions cowplot en ajoutant le préfixe cowplot::
. Par exemple, l'exemple ci-dessus utilisant le thème par défaut ggplot2 deviendrait:
## 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")
Mises à jour:
- Depuis cowplot 1.0, le thème ggplot2 par défaut n'est plus modifié.
- Depuis ggplot2 3.0.0, les tracés peuvent être étiquetés directement, voir par exemple ici.