library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
geom_boxplot(fill = "#3a86d4", alpha = 0.7) +
facet_grid(supp ~ .) +
labs(x = "Dose (mg/day)", y = "Tooth length") +
theme_minimal()
Découpez un ggplot en une matrice de panneaux avec facet_wrap() et facet_grid() — en direct dans votre navigateur
Apprenez à créer des facettes d’un graphique ggplot2 en R — découpez-le en petits multiples avec facet_wrap() et facet_grid(), libérez les échelles des panneaux et personnalisez les étiquettes et l’arrière-plan des bandeaux. Modifiez et exécutez le code en direct, sans installation.
20 juin 2026
7 juillet 2026
facet_wrap(~ var) pour répartir les panneaux d’une variable dans une grille ; contrôlez la forme avec ncol / nrow.facet_grid(rows ~ cols) pour disposer les panneaux selon deux variables — var ~ . pour les lignes, . ~ var pour les colonnes.scales = "free", "free_x" ou "free_y" ; la valeur par défaut est fixe (idéale pour la comparaison).labeller = label_both ou un vecteur nommé labeller().theme(strip.text = ..., strip.background = ...) et ajoutez de l’espace entre les panneaux avec panel.spacing.Les facettes sont la façon dont ggplot2 transforme un graphique surchargé en une grille soignée de petits multiples : au lieu d’entasser chaque sous-groupe dans un seul panneau, vous donnez à chacun son propre panneau sur une échelle partagée, de sorte que les motifs ressortent et que la comparaison reste honnête. En R, ggplot2 propose deux couches de facettes — facet_wrap() pour une variable et facet_grid() pour une ou deux — ainsi qu’un contrôle complet des échelles des panneaux et des étiquettes des bandeaux. Cette leçon les construit pas à pas ; les figures sont générées ici même, et vous pouvez réexécuter ou modifier chacune d’elles en direct.
Nous utilisons le jeu de données intégré ToothGrowth : la longueur des cellules odontoblastes (len) chez des cochons d’Inde recevant de la vitamine C à trois doses (dose : 0.5, 1 ou 2 mg/jour) selon deux méthodes d’administration (supp : jus d’orange OJ ou acide ascorbique VC). Créer des facettes par supp et dose est une façon naturelle de voir comment chaque combinaison se comporte.
facet_grid() dispose les panneaux sur une grille définie par une formule, rows ~ cols. Placez l’espace réservé . du côté que vous ne voulez pas découper. Utilisez supp ~ . pour empiler les panneaux en lignes, et . ~ supp pour les étaler en colonnes.

Remplacez la formule par . ~ supp pour disposer les mêmes panneaux côte à côte en colonnes à la place :
Nommez une variable de chaque côté du ~ pour construire une véritable grille à deux dimensions : supp ~ dose donne une ligne par supplément et une colonne par dose. Inversez l’ordre en dose ~ supp et les lignes et colonnes s’échangent.
Lorsque vous créez des facettes selon une variable sans vous soucier d’une signification stricte de ligne/colonne, facet_wrap() fait circuler les panneaux dans une grille compacte et passe automatiquement à la ligne suivante. Contrôlez sa forme avec ncol ou nrow.
Par défaut, chaque panneau partage un même jeu d’axes, ce qui rend la comparaison entre panneaux équitable. Définissez scales = "free_y" pour laisser l’axe des y de chaque panneau s’étendre à ses propres données, "free_x" pour l’axe des x, ou "free" pour les deux. N’utilisez les échelles libres que lorsque la forme de chaque panneau importe plus que la comparaison absolue.
Par défaut, le bandeau affiche seulement le niveau (0.5, 1, 2). Passez labeller = label_both pour afficher le nom de la variable à côté de chaque valeur — pratique lorsqu’un simple nombre est ambigu.
Pour définir vous-même le texte du bandeau, passez à labeller() un vecteur de caractères nommé qui associe chaque niveau à une nouvelle étiquette. Les noms doivent correspondre exactement aux niveaux du facteur. (Renommer les niveaux du facteur sous-jacent avec labels = fonctionnerait aussi, mais l’approche labeller() laisse vos données intactes.)
L’étiquette du bandeau est un élément de thème. Modifiez sa police, sa taille et sa couleur via theme(strip.text = element_text(...)) — utile lorsque vous voulez faire ressortir les en-têtes des panneaux.
Utilisez le thème strip.background pour contrôler le rectangle situé derrière chaque étiquette de bandeau — remplissage, contour et bordure — avec element_rect().
library(ggplot2)
ggplot(ToothGrowth, aes(x = supp, y = len)) +
geom_boxplot(fill = "#3a86d4", alpha = 0.7) +
facet_wrap(~ dose) +
labs(x = "Supplement", y = "Tooth length") +
theme_minimal() +
theme(
strip.background = element_rect(fill = "#dce9f7", colour = "grey60"),
strip.text = element_text(colour = "#1f3a5f")
)
Dans facet_grid(), margins = TRUE ajoute un panneau « (all) » supplémentaire qui regroupe les données sur l’ensemble de la variable de facette — un moyen rapide de voir chaque sous-groupe et l’image combinée dans une seule figure.
Lorsque les étiquettes ou les axes semblent serrés, élargissez les espaces entre les panneaux avec panel.spacing (une unit). Vous pouvez aussi élargir une seule direction avec panel.spacing.x ou panel.spacing.y.
Les facettes et la couleur sont indépendantes — vous pouvez toujours associer une variable à fill à l’intérieur de chaque panneau. Utilisez une palette adaptée au daltonisme comme viridis pour que la figure reste lisible pour tout le monde. Pour l’ensemble complet des contrôles de palette et de couleur, consultez le guide des couleurs ggplot2.
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 de petits multiples avec matplotlib/seaborn arrive dans la série Python.
Demandez à Prova « dois-je utiliser facet_grid ou facet_wrap pour deux variables ici ? » — elle répond avec du code que vous pouvez exécuter, de sorte que l’explication est reproductible. The runtime is the judge. Demander à Prova →
facet_wrap(~ var) fait circuler les panneaux d’une variable dans une grille compacte et passe à la ligne suivante, vous lui donnez donc sa forme avec ncol / nrow. facet_grid(rows ~ cols) dispose les panneaux sur une grille fixe définie par une ou deux variables, où chaque ligne et chaque colonne a une signification fixe.
Nommez une variable de chaque côté du ~ dans facet_grid() — par exemple facet_grid(supp ~ dose) place une ligne par supp et une colonne par dose. L’inverser en facet_grid(dose ~ supp) échange les lignes et les colonnes.
Ajoutez scales = "free_y" à votre couche de facettes, par exemple facet_wrap(~ dose, scales = "free_y"). Utilisez "free_x" pour l’axe des x ou "free" pour les deux ; la valeur par défaut est une échelle fixe, ce qui garde la comparaison entre panneaux équitable.
Pour des étiquettes avec le nom de la variable comme dose: 1, passez labeller = label_both. Pour définir votre propre texte, donnez à labeller() un vecteur nommé dont les noms correspondent exactement aux niveaux du facteur, par exemple labeller(dose = c("0.5" = "D0.5", "1" = "D1", "2" = "D2")).
Les bandeaux sont des éléments de thème : définissez strip.background = element_rect(fill = "#dce9f7", colour = "grey60") pour recolorer le rectangle, et strip.text = element_text(face = "bold", size = 12, colour = "#1f3a5f") pour modifier la police de l’étiquette, le tout à l’intérieur de theme().
Complétez le code pour que le graphique soit découpé en une seule ligne de panneaux, un par dose.
Vous avez découpé un graphique ggplot2 en petits multiples avec facet_wrap() et facet_grid(), disposé les panneaux selon une ou deux variables, libéré les échelles des panneaux, renommé les bandeaux avec label_both et un labeller() personnalisé, mis en forme le texte et l’arrière-plan des bandeaux, ajouté un panneau marginal, et élargi l’espacement des panneaux. Ensuite, explorez la boîte à moustaches que vous avez découpée ici, et le reste de la grammaire ggplot2.
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.
Prouvez que vous savez le faire. Maîtrisez toute la série ggplot2 — suivez votre parcours, construisez des projets et obtenez un certificat.
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
✓ Vous êtes Pro — continuez. The runtime is the judge.
Prêt à passer à la vitesse supérieure ?
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.
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.
@online{2026,
author = {},
title = {Facettes ggplot2 en R : graphiques multi-panneaux},
date = {2026-06-20},
url = {https://www.datanovia.com/learn/data-visualization/ggplot2/facets},
langid = {fr}
}