Il y a beaucoup de packages/ fonctions R pour combiner plusieurs ggplots dans le même graphique. Il s’agit notamment de : gridExtra::grid.arrange()
et cowplot::plot_grid
.
Récemment, Thomas Lin Pederson a développé le package R patchwork
pour rendre très facile la création de gglots multiples
Dans cet article, vous apprendrez comment utiliser le package pachwork
pour disposer plusieurs ggplots sur une page.
Sommaire:
Livre Apparenté
GGPLOT2 - L’Essentiel pour une Visualisation Magnifique des Données dans RInstallation
Au moment de la rédaction de cet article, pathchwork n’était disponible qu’en version développement sur GitHub.
Vous pouvez installer patchwork
à partir de github avec:
if(!require(devtools)) install.packages("devtools")
devtools::install_github("thomasp85/patchwork")
Chargement des packages R réquis
Chargez le package ggplot2 et mettez le thème par défaut à theme_bw()
avec la légende en haut du graphique:
library(ggplot2)
library(patchwork)
theme_set(
theme_bw() +
theme(legend.position = "top")
)
Créer quelques graphiques de base
Le code R suivant crée 4 graphiques, incluant : box plot, dot plot, line plot et density plot.
# 0. Définir une palette de couleurs personnalisée et préparer les données
my3cols <- c("#E7B800", "#2E9FDF", "#FC4E07")
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
# 1. Créer un box plot (bp)
p <- ggplot(ToothGrowth, aes(x = dose, y = len))
bxp <- p + geom_boxplot(aes(color = dose)) +
scale_color_manual(values = my3cols)
# 2. Créer un dot plot (dp)
dp <- p + geom_dotplot(aes(color = dose, fill = dose),
binaxis='y', stackdir='center') +
scale_color_manual(values = my3cols) +
scale_fill_manual(values = my3cols)
# 3. Créer un line plot
lp <- ggplot(economics, aes(x = date, y = psavert)) +
geom_line(color = "#E46726")
# 4. Diagramme de densité
dens <- ggplot(iris, aes(Sepal.Length)) +
geom_density(aes(color = Species)) +
scale_color_manual(values = my3cols)
Dispositions horizontales
L’utilisation de patchwork
est simple : il suffit d’additionner les graphes ensemble !
bxp + dens
Agencements verticaux
Les mises en page peuvent être spécifiées en ajoutant un appel de la fonction plot_layout()
à l’assemblage. Ceci vous permet de définir les dimensions de la grille et l’espace à allouer aux différentes lignes et colonnes.
bxp + dens + plot_layout(ncol = 1)
Préciser les dimensions de chaque plot
- Modifier la hauteur
bxp + dens + plot_layout(ncol = 1, heights = c(1, 3))
- Modifier la largeur
bxp + dens + plot_layout(ncol = 2, width = c(1, 2))
Ajouter de l’espace entre les graphes
bxp + plot_spacer() + dens
Dispositions imbriquées
Vous pouvez faire la disposition des graphiques imbriqués en enveloppant une partie des graphiques entre parenthèses - dans ces cas, la disposition est étendue aux différents niveaux d’imbrication.
lp + {
dens + {
bxp +
dp +
plot_layout(ncol = 1)
}
} +
plot_layout(ncol = 1)
Fonctions avancées
patchwork
provides some other operators that might be of interest: -
will behave like +
but put the left and right side in the same nesting level (as opposed to putting the right side into the left sides nesting level).
bxp + dp - lp + plot_layout(ncol = 1)
On peut voir que bxp + dens' et
lp’ sont au même niveau…
Note sur la sémantique. Si -
est lu comme soustraire son utilisation n’a pas beaucoup de sens car nous n’enlevons pas les graphes. Pensez plutôt à un trait d’union..
Souvent, vous êtes intéressé à mettre des graphes les uns à côté des autres ou les uns sur les autres. patchwork
fournit à la fois |
et //
pour les agencements horizontaux et verticaux, respectivement. Ils peuvent bien sûr être combinés pour une syntaxe de mise en page très lisible:
(bxp | lp | dp) / dens
(bxp | lp ) / (dp | dens)
(bxp / lp / dp) | dens
Deux opérateurs supplémentaires sont utilisés à des fins légèrement différentes, à savoir pour réduire la répétition du code. Considérez le cas où vous voulez changer le thème de tous les graphiques d’un assemblage.
Au lieu de modifier tous les graphiques individuellement, vous pouvez utiliser &
ou *
pour ajouter des éléments à tous les sous-plots. Les deux se distinguent par le fait que *
n’affectera que les graphiques du niveau d’imbrication actuel:
(bxp + (dp + dens) + lp + plot_layout(ncol = 1)) * theme_gray()
tandis que &
reviendra à des niveaux imbriqués:
(bxp + (dp + dens) + lp + plot_layout(ncol = 1)) & theme_gray()
Notez que la parenthèse est requise dans le premier cas en raison de la priorité plus élevée de l’opérateur *
. Ce dernier cas est le plus courant et a donc mérité la plus grande facilité d’utilisation.
Référence
Version: English
No Comments