Tutoriel : Comment assembler plusieurs graphiques dans R ?

Introduction

Dans le domaine de la visualisation de données avec R, le package ggplot2 se distingue par sa capacité à générer des graphiques à la fois complexes et visuellement attrayants grâce à sa grande flexibilité.

Toutefois, lorsqu’il s’agit d’analyser différents graphiques, il est souvent nécessaire de pouvoir les comparer, les contraster ou simplement les présenter côte à côte.

Dans cet article, je vous propose un tutoriel détaillé pour explorer deux approches, l’une simple et l’autre plus élaborée, afin de répondre efficacement à ce besoin d‘assembler plusieurs graphiques.

Table des matières

Le package gridExtra : la solution basique pour assembler plusieurs graphiques

Une solution toute simple pour assembler plusieurs graphiques, consiste à employer la fonction ggarrange() du package gridExtra. Je l’utilise lorsqu’il s’agit uniquement de positionner plusieurs graphiques côte à côte, sans ajouter de texte, ou sans employer des tailles de graphiques différentes. C’est possible, mais dans cette situation, je préfère utiliser les packages patwork ou cowplott (je vous en parle plus loin).

library(ggplot2)

g1 <- ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width, colour=Species))+
  geom_point()+
  geom_smooth(method="lm")+
  facet_wrap(~Species)

g2 <- ggplot(iris, aes(x=Species, y=Sepal.Length, colour=Species))+
  geom_jitter(height=0, width=0.15)+
  geom_boxplot(outlier.alpha=0, alpha=0.5)+
  coord_flip() 
library(gridExtra)
grid.arrange(g1, g2) 

Assembler plusieurs graphiques est très simple.  Et si nous souhaitons une disposition en 2 colonnes, il suffit d’ajouter l’argument ncol=2 (ou nrow=2 pour une disposition en 2 lignes) :

grid.arrange(g1, g2, ncol=2) 

Pour éviter de répéter la légende, vous pouvez la supprimer sur le 2ᵉ graphique, mais cela cré un décalage. Par exemple :

g2.2 <- g2 +
  theme(legend.position = "none")

grid.arrange(g1, g2.2) 

À noter que si vous souhaitez assembler plusieurs graphiques réalisés avec un package complémentaire à ggplot2, comme GGally, vous allez obtenir un message d’erreur :

library(GGally)
g3 <- ggpairs(iris, aes(colour=Species))
grid.arrange(g1,g3)

Error in gList(...): only 'grobs' allowed in "gList" 

Cette erreur se produit parce que ggpairs() (du package GGally) ne retourne pas un objet dont le type peut être directement assemblé par gridExtra.

Pour résoudre ce problème, vous devez convertir le résultat de la fonction ggpairs() en employant la fonction ggmatrix_gtable() :

g3_grob <- GGally::ggmatrix_gtable(g3)

# Utiliser grid.arrange avec g1 et le grob de g3
grid.arrange(g1, g3_grob, ncol = 2) 

Pour aller plus loin avec la fonction grid.arrange(), vous pouvez consulter la vignette du package gridExtra ici : https://cran.r-project.org/web/packages/gridExtra/vignettes/arrangeGrob.html

Le package patchwork : la solution la plus flexible pour assembler des graphiques

Lorsque j’ai besoin d’assembler plusieurs graphiques de manière un peu plus sophistiquée, j’emploie le package patchwork.

Les bases

Sa syntaxe est assez simple : on utilise les opérateurs 

  • + pour assembler , 
  • | pour indiquer ce qui doit être sur la même ligne
  • / pour indiquer l’utilisation d’une nouvelle ligne.

Vous allez voir c’est assez intuitif, et les possibilités sont nombreuses.

Si vous avez des difficultés à l’installer classiquement avec l’onglet “Packages” de Rstudio, vous pouvez passer par son répertoire Github :

 
# install.packages("devtools")
devtools::install_github("thomasp85/patchwork")
library(patchwork) 
# L'opertaeur + pour assembler
g1 + g2 

Si nous souhaitons 2 lignes, nous utilisons l’opérateur “/”

g1 / g2 
(g1 | g2)/g3_grob 
g1|(g2/g3_grob) 

Annoter

Il est également possible d’ajouter une annotation avec la fonction plot_annotation() :

(g1 | g2)/g3_grob +
  plot_annotation(tag_levels="A") 

Le tag employé est automatiquement itéré :

(g1 | g2)/g3_grob +
  plot_annotation(tag_levels="1") 

Contrôler la taille

Vous pouvez spécifier la taille des différents graphiques avec la fonction plot_layout() et ses arguments height et width. Ici les 2 plots du haut sont 3 fois moins hauts que celui du bas :

(g1 | g2) / g3_grob +
    plot_layout(height=c(1,3)) 

Gérer les multiples légendes

Avec patchwork l’absence de légende sur un des 2 graphes n’entraîne pas de décalage :

g1 / g2.2 

Et il est aussi possible de la déplacer, afin qu’elle soit associée à l’ensemble des plots, en utilisant la fontion plot_layout() et son argument guides = 'collect':

g1 / g2.2 + plot_layout(guides = 'collect') 

Gérer les axes communs

Parfois, deux graphes partagent les mêmes axes:

g4 <- ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width, colour=Species))+
  geom_point()+
  geom_smooth(method="lm")+
  theme(legend.position="none")


g5 <- ggplot(iris, aes(x=Petal.Length, y=Sepal.Width, colour=Species))+
  geom_point()+
  geom_smooth(method="lm")+
  theme(legend.position="none")

g4 + g5 

Dans cette situation, de façon un peu similaire à la légende, il est possible d’en afficher qu’un seul, en utilisant la fonction plot_layout() et son argument axes = 'collect'

g4+g5 + plot_layout(axes = "collect") 

Consultez la vignette du package patchwork

Les possibilités d’assemblage avec patchwork sont très importantes, vous trouverez des informations et des exemples complémentaires dans la vignette du package : https://patchwork.data-imaginist.com/index.html

Pour aller plus loin

Le package Cowplot

Si vous ne parvenez pas à faire ce que vous souhaitez avec patchwork, vous pourrez probablement le faire avec le package cowplot, notamment en terme d’alignement (les 2 packages utilisent des approches différentes). r

Le package a été initialement écrit par Claus O. Wilke pour un usage interne afin de fournir à des étudiants et postdoctorants les outils nécessaires pour créer des figures de haute qualité pour leurs publications. Il est également largement utilisé dans son livre Fundamentals of Data Visualization (https://clauswilke.com/dataviz/.

Vous trouverez l’ensemble des vignettes ici : https://wilkelab.org/cowplot/articles/index.html

Le package ggpubr

Si vous employez le package ggpubr pour réaliser certains graphiques, ce package propose aussi des fonctions pour les assembler, notamment les fonctions :ggarrange(),ggexport(),annotate_figure(),background_image(). Vous trouverez plus d’informations sur ces fonctions, ici: https://rpkgs.datanovia.com/ggpubr/reference/index.html

Conclusion

Comme nous venons de le voir, R propose plusieurs possibilités pour assembler des graphiques,et ainsi représenter des données complexes de façon harmonieuse et visuellement élégante.

Le package gridExtra est idéal pour les besoins d’arrangement de plusieurs graphiques, de manière rapide et direct, sans fioritures. Le package patchwork, quant à lui, permet d’assembler plusieurs graphiques de manière plus fine, en permettant une gestion facile des annotations et des légendes. Pour les besoins d’alignement précis et pour une intégration plus poussée avec ggplot2, le package cowplot peut être une solution intéressante, en particulier pour les publications de haute qualité.

Au-delà de ces trois packages, le package ggpubr offre également des options intéressantes pour ceux qui utilisent déjà ses fonctions de création de graphiques.

Chacun de ces outils a sa place dans notre boîte à outils, et la maîtrise de leur utilisation peut grandement enrichir la qualité et l’impact de nos visualisations.

J’aimerais beaucoup connaître votre avis sur cet article.  Que vous ayez des retours à partager, des astuces supplémentaires à proposer ou des difficultés que vous avez rencontrées en assemblant des graphiques dans R, n’hésitez pas à laisser un commentaire ci-dessous. Votre expérience peut grandement bénéficier à tous ! 

 

2 Responses

  1. Merci Claire pour ce tuto que je testerai prochainement.

    J’avais déjà mis les mains dans les affichages graphiques mais sans aller plus loin et par manque de temps. J’étais donc passé par navigation en onglet FlexDashBoard.

    Je suppose que c’est Flex et/ou shiny compatible ?
    Merci d’avance, et belle journée !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous souhaitez vous former à R, ou aux statistiques ?

Retrouver le planning et les programmes de  mes formations ici  👇👇👇 

Vous avez besoin d'un assitance pour analyser vos données ?

Retrouver mes propositions de services ici  👇👇👇 

Vous souhaitez soutenir mon travail ?​

C’est possible en faisant un don  sur la page Tipeee du blog  👇👇👇

Bonjour !

vous venez souvent ?

Identifiez-vous pour avoir accès à toutes les fontionnalités !

Aide mémoire off'R ;)

Enregistrez vous pour recevoir gratuitement mes fiches “aide mémoire” (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.