GGPlot Multiples Rendus Faciles par le Package R Patchwork



GGPlot Multiples Rendus Faciles par le Package R Patchwork

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 R

Installation

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' etlp’ 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.



Version: English





No Comments

Give a comment

Want to post an issue with R? If yes, please make sure you have read this: How to Include Reproducible R Script Examples in Datanovia Comments