Boîte à moustaches en R : guide ggplot2

Tracer, grouper et personnaliser une boîte à moustaches ggplot2 — en direct dans votre navigateur

Apprenez à construire une boîte à moustaches en R avec ggplot2 — tracez-la avec geom_boxplot(), comparez des groupes, ajoutez des points dispersés et des encoches, et remplissez par groupe. Modifiez et exécutez le code en direct, sans installation.

Date de publication

20 juin 2026

Modifié

7 juillet 2026

AstuceL’essentiel
  • Une boîte à moustaches résume la distribution d’une variable numérique — médiane, quartiles et valeurs aberrantes — en une seule forme compacte.
  • Dans ggplot2, vous associez un groupe à x et les valeurs à y, puis vous tracez avec geom_boxplot().
  • Révélez les données brutes en superposant geom_jitter() par-dessus les boîtes.
  • Utilisez notch = TRUE pour un test visuel approximatif permettant de voir si deux médianes diffèrent.
  • Colorez les boîtes par groupe avec une palette adaptée au daltonisme (scale_fill_viridis_d()) ; fill correspond à l’intérieur, colour au contour.
  • Associez une seconde variable à fill pour comparer les groupes côte à côte (boîtes décalées).
  • Déplacez ou masquez la légende avec theme(legend.position = ...), et définissez son ordre via les niveaux du facteur.
  • Chaque graphique ci-dessous est rendu pour vous — puis ajustez n’importe quel exemple en direct dans le bac à sable.
Obtenez le livre — GGPlot2 Essentials (PDF)

Introduction

Une boîte à moustaches (ou diagramme en boîte) est le moyen le plus rapide de comparer une variable numérique entre groupes : elle montre la médiane, l’écart interquartile et les valeurs aberrantes d’un coup d’œil. En R, ggplot2 en trace une avec une seule couche — geom_boxplot() — et facilite l’ajout de points, d’encoches et de couleurs. Cette leçon en construit une étape par étape ; les figures sont rendues 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) via deux méthodes d’administration (supp : jus d’orange OJ ou acide ascorbique VC).

Construire le graphique

Associez dose à l’axe des x et len à l’axe des y, puis ajoutez une seule couche de boîte à moustaches. Comme dose est stockée sous forme de nombre, encapsulez-la dans factor() pour que ggplot2 trace une boîte par groupe.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_boxplot(fill = "#3a86d4", alpha = 0.7) +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 box plot of tooth length (len) by vitamin C dose; length rises with dose across three boxes.

Montrer les données : ajouter des points dispersés

Une boîte masque le nombre d’observations qui se cachent derrière elle. Superposez geom_jitter() par-dessus pour montrer chaque point, légèrement décalé latéralement afin qu’ils ne se chevauchent pas. Définissez outlier.shape = NA sur la boîte à moustaches pour que les valeurs aberrantes ne soient pas tracées deux fois.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_boxplot(outlier.shape = NA) +
  geom_jitter(width = 0.15, alpha = 0.5, color = "#3a86d4") +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 box plot of tooth length by dose with individual jittered data points overlaid on each box.

Boîtes avec encoches

Une encoche marque un intervalle de confiance autour de la médiane. Lorsque deux encoches ne se chevauchent pas, c’est une preuve visuelle approximative que les médianes diffèrent.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_boxplot(notch = TRUE, fill = "#3a86d4", alpha = 0.7) +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 notched box plot of tooth length by dose; the notches narrow around each median.

Ajouter les points de moyenne

La boîte marque la médiane. Pour montrer également la moyenne, superposez stat_summary() — utile lorsque vous voulez les deux mesures de tendance centrale d’un coup d’œil.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_boxplot(fill = "#3a86d4", alpha = 0.7) +
  stat_summary(fun = mean, geom = "point", shape = 23, size = 3, fill = "white") +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 box plot of tooth length by dose with a red diamond marking the mean of each group.

Colorer les boîtes par groupe

Pour colorer chaque boîte selon son groupe, associez la variable de groupement à fill. Utilisez une palette adaptée au daltonisme comme viridis afin que la figure reste lisible pour tout le monde, en couleur ou à l’impression.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = factor(dose))) +
  geom_boxplot() +
  scale_fill_viridis_d() +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Dose") +
  theme_minimal()

ggplot2 box plot of tooth length by dose, each box filled with a colourblind-safe viridis colour.

Deux attributs esthétiques distincts contrôlent la couleur : fill peint l’intérieur de la boîte, colour le contour. Définissez-les indépendamment — ici un contour sombre avec un remplissage adouci (alpha) :

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = factor(dose))) +
  geom_boxplot(colour = "grey30") +
  scale_fill_viridis_d(alpha = 0.7) +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Dose") +
  theme_minimal()

ggplot2 box plot of tooth length by dose with a dark grey outline and softened viridis fill colours.

Remplir par groupe : boîtes côte à côte

Associez une seconde variable à fill pour comparer les groupes au sein de chaque dose. ggplot2 place les boîtes côte à côte (décalées) automatiquement.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = supp)) +
  geom_boxplot() +
  scale_fill_viridis_d() +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Supplement") +
  theme_minimal()

ggplot2 grouped box plot of tooth length by dose, with orange-juice and ascorbic-acid boxes side by side at each dose.

Personnaliser la légende

Déplacez la légende avec theme(legend.position = ...)"top", "bottom", "left", "right", ou "none" pour la masquer. Contrôlez l’ordre des groupes en définissant les niveaux du facteur. Pour l’ensemble complet des réglages de légende (titre, étiquettes, style, placement à l’intérieur du graphique), consultez le guide des légendes ggplot2.

library(ggplot2)
# reorder the supplement groups (VC before OJ) on a local copy — no global side effect
tg <- ToothGrowth
tg$supp <- factor(tg$supp, levels = c("VC", "OJ"))
ggplot(tg, aes(x = factor(dose), y = len, fill = supp)) +
  geom_boxplot() +
  scale_fill_viridis_d() +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Supplement") +
  theme_minimal() +
  theme(legend.position = "top")

ggplot2 grouped box plot with the legend moved to the top and the supplement groups reordered.

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 boîtes à moustaches arrive bientôt dans la série Python.

🟢 Avec un agent IA

Demandez à Prova « les encoches signifient-elles que les médianes sont significativement différentes ici ? » — elle répond avec du code que vous pouvez exécuter, donc l’explication est reproductible. The runtime is the judge. Ask Prova →

Questions fréquentes

Associez la variable de groupement à x et les valeurs à y, puis ajoutez geom_boxplot(). Si la variable de groupement est stockée sous forme de nombre (comme dose), encapsulez-la dans factor() — par exemple aes(x = factor(dose), y = len) — pour que ggplot2 trace une boîte par niveau au lieu d’une seule boîte.

Superposez geom_jitter() après geom_boxplot() pour disperser latéralement les observations individuelles afin qu’elles ne se chevauchent pas, par exemple geom_jitter(width = 0.15, alpha = 0.5). Définissez outlier.shape = NA sur la boîte pour que les valeurs aberrantes ne soient pas tracées deux fois — une fois par la boîte et une fois par les points.

fill peint l’intérieur de la boîte tandis que colour définit le contour. Vous pouvez les définir indépendamment — par exemple geom_boxplot(colour = "grey30") avec scale_fill_viridis_d() donne un contour sombre par-dessus des couleurs de remplissage adoucies.

La boîte marque la médiane, pas la moyenne. Pour ajouter la moyenne, superposez stat_summary(fun = mean, geom = "point", shape = 23, size = 3, fill = "white"), qui trace un point à la moyenne de chaque groupe par-dessus les boîtes.

Utilisez theme(legend.position = ...) avec "top", "bottom", "left", "right", ou "none" pour la masquer entièrement. Pour changer l’ordre des groupes dans la légende, définissez les niveaux du facteur avec factor(x, levels = c(...)) avant de tracer.

Testez vos connaissances

Complétez le code pour que chaque boîte montre aussi ses observations individuelles sous forme de points dispersés.

# Use geom_jitter() with a small width, e.g. width = 0.15
library(ggplot2) ggplot(ToothGrowth, aes(x = factor(dose), y = len)) + geom_boxplot(outlier.shape = NA) + geom_jitter(width = 0.15, alpha = 0.5)
library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_boxplot(outlier.shape = NA) +
  geom_jitter(width = 0.15, alpha = 0.5)

Conclusion

Vous avez construit une boîte à moustaches ggplot2, superposé les données brutes avec des points dispersés, ajouté des encoches, coloré les boîtes par groupe avec une palette adaptée au daltonisme, comparé les groupes côte à côte avec fill, et soigné la légende. Ensuite, explorez le nuage de points pour les relations entre deux variables numériques, et le reste de la grammaire 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 = {Boîte à moustaches en R : guide ggplot2},
  date = {2026-06-20},
  url = {https://www.datanovia.com/learn/data-visualization/ggplot2/boxplot},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Boîte à moustaches en R : guide ggplot2.” 2026. June 20. https://www.datanovia.com/learn/data-visualization/ggplot2/boxplot.