Visualisation des Données à l'Aide de GGPlot2

Combiner Plusieurs GGPlots dans une Figure

Cet article décrit comment combiner plusieurs ggplots en une figure. Pour accomplir cette tâche, il existe de nombreuses fonctions/package R, notamment:

  • grid.arrange()[package gridExtra]
  • plot_grid()[package cowplot]
  • plot_layout() [package patchwork]
  • ggarrange()[package ggpubr]

La fonction ggarrange()[ggpubr] est l’une des solutions les plus simples pour organiser plusieurs ggplots.

Ici, vous apprendrez à utiliser:

  • les fonctions de ggplot2 pour créer des figures à plusieurs panneaux partageant les mêmes axes
  • Fonction ggarrange() pour combiner des ggplots indépendants


Sommaire:

Livre Apparenté

GGPLOT2 - L’Essentiel pour une Visualisation Magnifique des Données dans R

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("ggpubr")
theme_set(
  theme_bw() +
    theme(legend.position = "top")
  )

GGPlot basique

Créer un box plot rempli par groupes:

# Charger les données et convertir `dose` en une variable de type facteur
data("ToothGrowth")
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
# Box plot
p <- ggplot(ToothGrowth, aes(x = dose, y = len)) + 
  geom_boxplot(aes(fill = supp), position = position_dodge(0.9)) +
  scale_fill_manual(values = c("#00AFBB", "#E7B800"))
p

Figure à panneaux multiples utilisant ggplot facet

Les facettes divisent un ggplot en plusieurs panneaux basés sur les valeurs d’une ou plusieurs variables catégorielles

Lorsque vous créez plusieurs graphiques qui partagent des axes, vous devriez envisager d’utiliser les fonctions facettes de ggplot2

Vous écrivez votre code ggplot2 comme si vous mettiez toutes les données sur un seul graphique, puis vous utilisez l’une des fonctions de facettes pour indiquer comment diviser le graphique en panneaux.

Il y a deux fonctions principales dans le package ggplot2:

  1. facet_grid(), qui organise les panneaux dans une grille. Il crée une matrice de panneaux définis par des variables de lignes et de colonnes
  2. facet_wrap(), qui enveloppe une séquence 1d de panneaux en 2d. C’est généralement une meilleure utilisation de l’espace écran que facet_grid() car la plupart des affichages sont à peu près rectangulaires.

Utilisation de facet_grid

  1. Facette avec une variable discrète. Séparé en fonction du groupe “supp”
# Séparé dans le sens vertical
p + facet_grid(rows = vars(supp))

# Séparé dans le sens horizontal
p + facet_grid(cols = vars(supp))

  1. Facette à variables multiples. Séparé pen fonction de deux variables de regroupement : “dose” et “supp”
# Facette par deux variables : dose et supp.
# Les lignes sont la variable`dose` et les colonnes sont `supp`
p + facet_grid(rows = vars(dose), cols = vars(supp))

Utiliser facet_wrap

facet_wrap : Les panneaux peuvent être placés côte à côte en utilisant la fonction facet_wrap() comme suit :

p + facet_wrap(vars(dose))

p + facet_wrap(vars(dose), ncol=2)

Echelles de facet

Par défaut, tous les panneaux ont les mêmes échelles (scales="fixed"). Ils peuvent être rendus indépendants, en réglant les échelles sur free, free_x, ou free_y.

p + facet_grid(rows = vars(dose), cols = vars(supp), scales = "free")

Combiner plusieurs ggplots avec ggarrange()

Créer quelques graphiques de base

# 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") 

Combiner les graphiques sur une page

figure <- ggarrange(bxp, dp, lp,
                    labels = c("A", "B", "C"),
                    ncol = 2, nrow = 2)
figure



Modifier l’étendu des colonnes et des lignes d’un graphique

Nous utiliserons les fonctions ggarrange() imbriquées pour changer l’etendu des colonnes/lignes des graphiques. Par exemple, en utilisant le code R ci-dessous:

  • le line plot (lp) sera dans la première ligne et s’étendra sur deux colonnes
  • le box plot (bxp) et le dot plot (dp) seront d’abord disposés dans la deuxième rangée avec deux colonnes différentes
ggarrange(
  lp,                # Première ligne contenant le line plot
  # Deuxième ligne avec box plots et dot plots
  ggarrange(bxp, dp, ncol = 2, labels = c("B", "C")), 
  nrow = 2, 
  labels = "A"       # Étiquette du line plot
  ) 

Utiliser une légende commune pour les ggplots combinés

Pour placer une légende unique commune en marge des graphiques arrangés, la fonction ggarrange()[in ggpubr] peut être utilisée avec les arguments suivants:

  • common.legend = TRUE: placer une légende commune dans une marge
  • legend: spécifier la position de la légende. Les valeurs autorisées sont l’une des valeurs c(“top”, “bottom”, “left”, “right”)
ggarrange(
  bxp, dp, labels = c("A", "B"),
  common.legend = TRUE, legend = "bottom"
  )

Combiner les graphiques sur plusieurs pages

Si vous avez une longue liste de ggplots, disons n = 20 graphes, vous voudrez peut-être disposer les graphes et les placer sur plusieurs pages. Avec 4 graphiques par page, vous avez besoin de 5 pages pour contenir les 20 graphiques.

La fonction ggarrange() [ggpubr] fournit une solution pratique pour organiser plusieurs ggplots sur plusieurs pages. Après avoir spécifié les arguments nrow et ncol, ggarrange() calcule automatiquement le nombre de pages nécessaires pour contenir la liste des graphes. Il retourne une liste de ggplots arrangés.

Par exemple, le code R suivant,

multi.page <- ggarrange(bxp, dp, lp, bxp,
                        nrow = 1, ncol = 2)

renvoie une liste de deux pages avec deux graphiques par page. Vous pouvez visualiser chaque page comme suit:

multi.page[[1]] # Visualiser la page 1
multi.page[[2]] # Visualiser la page 2

Vous pouvez aussi exporter les graphiques arrangés dans un fichier pdf en utilisant la fonction ggexport()[ggpubr]:

ggexport(multi.page, filename = "multi.page.ggplot2.pdf")

Voir le fichier PDF : Multi.page.ggplot2

Exporter les graphiques arrangés

Fonction R : ggexport() [dans ggpubr].

  • Exporter la figure arrangée vers un fichier pdf, eps ou png (une figure par page).
ggexport(figure, filename = "figure1.pdf")
  • Il est également possible de disposer les graphiques (2 graphiques par page) lors de leur exportation.

Exporter des graphiques individuels vers un fichier pdf (un graphique par page):

ggexport(bxp, dp, lp, bxp, filename = "test.pdf")

Organiser et exporter. Spécifiez les arguments nrow et ncol pour afficher plusieurs graphes sur la même page:

ggexport(bxp, dp, lp, bxp, filename = "test.pdf",
         nrow = 2, ncol = 1)

Conclusion

Cet article décrit comment créer une figure combinant plusieurs graphiques en utilisant les fonctions ggplot2 facet et la fonction ggarrange() disponible dans le package ggpubr. Nous montrons également comment exporter les graphiques arrangés.



Version: English

GGPLOT ECDF (Prev Lesson)
Back to Visualisation des Données à l’Aide de GGPlot2

Comment ( 1 )

  • Phil

    Merci pour ce tuto très clair ! Je souhaiterais faire un graphique combiné avec 3 graphiques et ggarrange mais en mettant 2 graphiques sur la première ligne et 1 seul sur la deuxième ligne, qui prenne tout l’espace. Comme dans votre exemple avec le graphique lp et les 2 autres mais en mettant lp seul en bas et les 2 autres en haut. Je n’arrive pas à modifier le code pour que cela fonctionne, une idée ?? Merci par avance !

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

Teacher
Alboukadel Kassambara
Role : Fondateur de Datanovia
Read More