Combiner plusieurs ggplots dans R : guide patchwork

Disposez des ggplots indépendants dans une seule figure avec patchwork — en direct dans votre navigateur

Apprenez à combiner plusieurs ggplots en une seule figure dans R — placez les graphiques côte à côte ou empilés avec patchwork, construisez des mises en page personnalisées, ajoutez des étiquettes de panneau et regroupez une légende partagée. Modifiez et exécutez le code en direct, sans installation.

Date de publication

20 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Un seul jeu de données, plusieurs panneaux ? Utilisez facet_wrap() / facet_grid() (intégrés à ggplot2).
  • Des graphiques indépendants dans une seule figure ? Utilisez le package patchwork — combinez des ggplots avec des opérateurs simples.
  • p1 + p2 place les graphiques côte à côte ; p1 / p2 les empile ; mélangez avec | et () pour des mises en page personnalisées.
  • Ajoutez un titre de figure et des étiquettes de panneau (A, B, C) avec plot_annotation().
  • Fusionnez les légendes en double en une seule avec plot_layout(guides = "collect").
  • Chaque figure ci-dessous est rendue pour vous — puis ajustez n’importe quel exemple en direct dans le bac à sable.
Obtenez le livre — GGPlot2 Essentials (PDF)

Introduction

Une seule figure qui présente plusieurs graphiques ensemble raconte une histoire plus riche — et il y a deux tâches distinctes. Lorsque les panneaux sont le même type de graphique réparti par groupe, le facettage intégré à ggplot2 est l’outil adapté. Lorsque vous voulez combiner des graphiques indépendants (un nuage de points à côté d’une boîte à moustaches à côté d’un histogramme), tournez-vous vers patchwork — il vous permet d’assembler des ggplots avec des opérateurs intuitifs. Cette leçon couvre patchwork ; les figures sont rendues ici même, et vous pouvez réexécuter ou modifier chacune d’elles en direct.

Nous construisons de petits graphiques à partir des jeux de données intégrés mtcars, ToothGrowth et iris.

Deux graphiques côte à côte, ou empilés

Construisez chaque ggplot comme un objet, puis combinez : + les dispose côte à côte, / les empile.

library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars, aes(wt, mpg)) +
  geom_point(colour = "#3a86d4") + theme_minimal()
p2 <- ggplot(ToothGrowth, aes(factor(dose), len)) +
  geom_boxplot(fill = "#3a86d4", alpha = 0.7) + theme_minimal()

p1 + p2          # side by side

Two ggplots combined side by side with patchwork: a scatter plot of weight vs mpg and a boxplot of tooth length by dose.

Remplacez + par / pour empiler verticalement les deux mêmes graphiques :

library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars, aes(wt, mpg)) +
  geom_point(colour = "#3a86d4") + theme_minimal()
p2 <- ggplot(ToothGrowth, aes(factor(dose), len)) +
  geom_boxplot(fill = "#3a86d4", alpha = 0.7) + theme_minimal()

p1 / p2          # stacked

The same scatter plot and boxplot stacked vertically into one figure with patchwork.

Mises en page personnalisées

Combinez les opérateurs avec des parenthèses pour construire une mise en page — ici, deux graphiques en haut et un graphique large en dessous. plot_layout() affine les tailles relatives.

library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars, aes(wt, mpg)) +
  geom_point(colour = "#3a86d4") + theme_minimal()
p2 <- ggplot(ToothGrowth, aes(factor(dose), len)) +
  geom_boxplot(fill = "#3a86d4", alpha = 0.7) + theme_minimal()
p3 <- ggplot(faithful, aes(waiting)) +
  geom_histogram(bins = 30, fill = "#3a86d4", alpha = 0.7) + theme_minimal()

(p1 | p2) / p3

A patchwork layout with a scatter plot and boxplot on the top row and a wide histogram across the bottom.

Ajouter un titre et des étiquettes de panneau

plot_annotation() ajoute un titre pour l’ensemble de la figure et étiquette automatiquement chaque panneau — tag_levels = "A" donne A, B, C (utilisez "1" pour des chiffres).

library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars, aes(wt, mpg)) +
  geom_point(colour = "#3a86d4") + theme_minimal()
p2 <- ggplot(ToothGrowth, aes(factor(dose), len)) +
  geom_boxplot(fill = "#3a86d4", alpha = 0.7) + theme_minimal()

(p1 + p2) +
  plot_annotation(title = "Two views of two datasets", tag_levels = "A")

Two combined ggplots with an overall title and panel tags A and B in the corners.

Regrouper une légende partagée

Lorsque les graphiques combinés partagent la même légende, plot_layout(guides = "collect") fusionne les doublons en une seule légende.

library(ggplot2)
library(patchwork)
a <- ggplot(iris, aes(Sepal.Length, Sepal.Width, colour = Species)) +
  geom_point() + scale_colour_viridis_d() + theme_minimal()
b <- ggplot(iris, aes(Species, Petal.Length, fill = Species)) +
  geom_boxplot() + scale_fill_viridis_d() + theme_minimal()

(a + b) + plot_layout(guides = "collect")

Two grouped ggplots combined with a single shared legend collected to the right.

Facettes ou combinaison

Ne vous tournez pas vers patchwork lorsqu’un seul jeu de données a simplement besoin de panneaux par groupe — c’est du facettage, intégré à ggplot2 :

library(ggplot2)
ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
  geom_point(colour = "#3a86d4") +
  facet_wrap(~ Species) +
  theme_minimal()

One ggplot scatter plot split into three panels by iris species using facet_wrap.

Utilisez les facettes pour un seul jeu de données réparti par variable ; utilisez patchwork pour des graphiques indépendants. Pour des arrangements prêts à publier, vous pourrez aussi rencontrer ggpubr::ggarrange() — la même idée, un package différent.

Essayez en direct

Les graphiques ci-dessus ont été rendus au moment de la construction. Envie d’expérimenter ? Modifiez le code et appuyez sur Run — il s’exécute dans votre navigateur via webR (sans serveur, sans installation).

Vous travaillez en Python ? Un guide matplotlib des subplots arrive dans la série Python.

🟢 Avec un agent IA

Demandez à Prova « comment rendre le graphique de gauche deux fois plus large que celui de droite dans patchwork ? » — elle répond avec du code que vous pouvez exécuter, pour que la mise en page soit reproductible. The runtime is the judge. Demander à Prova →

Questions fréquentes

Utilisez facet_wrap() / facet_grid() lorsqu’un seul jeu de données est réparti en panneaux par une variable de regroupement (même type de graphique, échelles partagées). Utilisez patchwork (p1 + p2) lorsque vous voulez combiner des graphiques indépendants — par exemple un nuage de points à côté d’une boîte à moustaches construits à partir de données différentes.

Construisez chaque graphique comme un objet, puis combinez-les avec + : p1 + p2 dispose les deux graphiques côte à côte dans une seule figure. Cela nécessite le package patchwork chargé avec library(patchwork).

Utilisez l’opérateur / : p1 / p2 empile les graphiques l’un au-dessus de l’autre. Vous pouvez mélanger +, /, | et des parenthèses — par exemple (p1 | p2) / p3 — pour construire des mises en page personnalisées.

Ajoutez plot_annotation(tag_levels = "A") au graphique combiné, comme dans (p1 + p2) + plot_annotation(tag_levels = "A"). Utilisez tag_levels = "1" pour des étiquettes numériques, et le même appel à plot_annotation() accepte un title = pour un titre d’ensemble de la figure.

Lorsque les graphiques combinés partagent la même légende, ajoutez plot_layout(guides = "collect") — par exemple (a + b) + plot_layout(guides = "collect") — et patchwork regroupe les légendes en double en une seule.

Testez vos connaissances

Complétez le code pour que les deux graphiques soient empilés (l’un au-dessus de l’autre) et étiquetés A, B.

# Stack with p1 / p2, then add plot_annotation(tag_levels = "A")
library(ggplot2) library(patchwork) p1 <- ggplot(mtcars, aes(wt, mpg)) + geom_point() + theme_minimal() p2 <- ggplot(ToothGrowth, aes(factor(dose), len)) + geom_boxplot() + theme_minimal() (p1 / p2) + plot_annotation(tag_levels = "A")
library(ggplot2)
library(patchwork)
p1 <- ggplot(mtcars, aes(wt, mpg)) + geom_point() + theme_minimal()
p2 <- ggplot(ToothGrowth, aes(factor(dose), len)) + geom_boxplot() + theme_minimal()
(p1 / p2) + plot_annotation(tag_levels = "A")

Conclusion

Vous avez combiné des ggplots indépendants en une seule figure avec patchwork — côte à côte, empilés, dans des mises en page personnalisées, avec un titre de figure, des étiquettes de panneau et une légende partagée — et vous avez vu quand utiliser plutôt le facettage. Ensuite, revoyez les facettes pour les panneaux d’un même jeu de données, et explorez le reste de la grammaire de ggplot2.

Leçons connexes

Vous préférez un livre ? GGPlot2 Essentials est disponible en PDF téléchargeable — toutes les leçons de cette série, hors ligne et à vous.

Obtenir le livre (PDF) →Les leçons restent gratuites en ligne.
Cette page vous a-t-elle été utile ?

Prouvez que vous savez le faire. Maîtrisez toute la série ggplot2 — suivez votre parcours, construisez des projets et obtenez un certificat.

Commencer gratuitement →

Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.

dès 15 $/mois facturé annuellement

Passer à Pro →

✓ Vous êtes Pro — continuez. The runtime is the judge.

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN
Note

Cette leçon est reproductible : les figures sont exécutées au moment de la construction (si elles s’affichent, le code fonctionne), et le bac à sable et le quiz se réexécutent en direct dans votre navigateur. The runtime is the judge.

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Combiner plusieurs ggplots dans R : guide patchwork},
  date = {2026-06-20},
  url = {https://www.datanovia.com/learn/data-visualization/ggplot2/combine-plots},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Combiner plusieurs ggplots dans R : guide patchwork.” 2026. June 20. https://www.datanovia.com/learn/data-visualization/ggplot2/combine-plots.