head(ToothGrowth) len supp dose
1 4.2 VC 0.5
2 11.5 VC 0.5
3 7.3 VC 0.5
4 5.8 VC 0.5
5 6.4 VC 0.5
6 10.0 VC 0.5
Tracez par groupe avec y ~ group, définissez les couleurs, passez à l’horizontale, ajoutez l’encoche et superposez les points
Créez une boîte à moustaches en R de base avec boxplot(). Tracez une variable ou par groupe avec la formule y ~ group, définissez les couleurs de remplissage et de bordure, passez à l’horizontale, ajoutez encoches et largeur variable, masquez les valeurs aberrantes, renommez les groupes, croisez deux facteurs et superposez les points bruts.
27 juin 2026
7 juillet 2026
boxplot() — une variable avec boxplot(x), ou par groupe avec la formule boxplot(y ~ group, data = df). Aucun package requis.col (remplissage) et border ; passez un vecteur pour colorer chaque groupe différemment.horizontal = TRUE, comparez les médianes avec notch = TRUE, mettez à l’échelle la largeur des boîtes selon la taille du groupe avec varwidth = TRUE.outline = FALSE, renommez les groupes avec names =, et superposez les données brutes avec stripchart(..., add = TRUE).Une boîte à moustaches résume une variable numérique en cinq nombres — le minimum, le premier quartile, la médiane, le troisième quartile et le maximum — et signale les valeurs aberrantes. C’est le moyen le plus rapide de comparer une distribution entre groupes : des boîtes côte à côte montrent d’un coup d’œil quel groupe est plus élevé, lequel est plus dispersé, et où se situent les valeurs atypiques.
En R de base, vous en tracez une avec boxplot(). Elle fonctionne de deux manières : passez un seul vecteur pour résumer une variable, ou passez une formule y ~ group pour tracer une boîte par groupe. Cette leçon couvre les deux, puis le style que vous utilisez réellement — couleurs, disposition horizontale, encoches, largeurs variables, masquage des valeurs aberrantes, renommage des groupes, croisement de deux facteurs et superposition des points bruts.
Nous utilisons le jeu de données intégré ToothGrowth : la longueur des odontoblastes (len) chez des cobayes ayant reçu de la vitamine C à trois doses (dose) selon deux méthodes d’administration (supp).
len supp dose
1 4.2 VC 0.5
2 11.5 VC 0.5
3 7.3 VC 0.5
4 5.8 VC 0.5
5 6.4 VC 0.5
6 10.0 VC 0.5
Vous préférez la grammaire des graphiques ? Le geom_boxplot() de ggplot2 construit la légende et le thème pour vous — voir boîte à moustaches dans la série ggplot2.
Passez un seul vecteur numérique pour résumer une variable. Voici la longueur des dents sur l’ensemble des 60 animaux :
Une seule boîte, tracée à partir de len seul. La ligne épaisse est la médiane, les bords de la boîte sont les premier et troisième quartiles, et les moustaches s’étendent jusqu’aux points les plus extrêmes dans la limite de 1.5×IQR de la boîte.
Le cas courant est une boîte par groupe. Utilisez l’interface formule — y ~ group — et nommez le jeu de données dans data =. R trace une boîte pour chaque niveau de dose :

len ~ dose se lit « longueur en fonction de la dose ». Les boîtes s’alignent de gauche à droite dans l’ordre des niveaux du facteur, et la longueur grimpe clairement avec la dose. Passez un vecteur de couleurs à col pour teinter chaque boîte — une couleur par groupe, dans l’ordre.
Pour retirer le cadre environnant et obtenir un rendu plus épuré, ajoutez frame = FALSE :
col remplit les boîtes ; border colore leur contour. Donnez soit une couleur unique pour toutes les boîtes, soit un vecteur pour colorer chaque groupe :
op <- par(mfrow = c(1, 2))
grp_cols <- c("#3a86d4", "#f4a259", "#5fad56")
# Left: single fill colour
boxplot(len ~ dose, data = ToothGrowth, frame = FALSE,
col = "#3a86d4", main = "Single fill")
# Right: a different border colour per group
boxplot(len ~ dose, data = ToothGrowth, frame = FALSE,
border = grp_cols, main = "Border by group")
Utilisez une couleur unique quand les groupes ne sont que des catégories que vous n’avez pas besoin de distinguer par la teinte ; utilisez un vecteur — un jeu adapté au daltonisme comme celui ci-dessus — quand la couleur elle-même porte le groupe.
Définissez horizontal = TRUE pour coucher les boîtes sur le côté. Cela se lit bien quand les étiquettes de groupe sont longues, ou quand vous voulez l’axe des valeurs le long du bas :

Avec horizontal = TRUE, les rôles s’inversent : la variable numérique court désormais le long de l’axe des x, donc les étiquettes d’axes s’échangent aussi.
notch = TRUE dessine une taille resserrée autour de chaque médiane. Les encoches donnent un test visuel approximatif pour savoir si les médianes diffèrent : si les encoches de deux boîtes ne se chevauchent pas, c’est une forte indication que leurs médianes diffèrent (Chambers et al., 1983).

Ici, les encoches se chevauchent à peine entre les doses, suggérant que les médianes diffèrent réellement. Traitez cela comme une vérification rapide à l’œil, pas comme un test formel — pour cela, lancez une comparaison des moyennes de groupes.
varwidth = TRUE rend la largeur de chaque boîte proportionnelle à la racine carrée de la taille de son groupe, de sorte que des boîtes plus larges signifient plus d’observations. C’est un indice gratuit sur la quantité de données qui soutient chaque résumé :

Dans mtcars, les groupes de cylindres diffèrent en taille, donc les boîtes ressortent à des largeurs différentes — la boîte la plus large est le groupe le plus peuplé.
Par défaut, boxplot() dessine les points au-delà des moustaches comme valeurs aberrantes. Définissez outline = FALSE pour les supprimer — utile quand quelques valeurs extrêmes étirent l’axe et masquent les boîtes, ou quand vous prévoyez de dessiner les points bruts vous-même :
op <- par(mfrow = c(1, 2))
# Left: outliers shown (the default)
boxplot(Sepal.Width ~ Species, data = iris, frame = FALSE,
main = "outline = TRUE", col = grp_cols)
# Right: outliers hidden
boxplot(Sepal.Width ~ Species, data = iris, frame = FALSE,
outline = FALSE, main = "outline = FALSE", col = grp_cols)
outline = FALSE ne masque que les points — il ne change ni la boîte ni les moustaches.
Remplacez les étiquettes de graduation avec names =, et ajoutez un en-tête et des titres d’axes avec main, xlab et ylab :

Le vecteur names doit lister une étiquette par groupe, dans le même ordre que les niveaux du facteur.
Croisez deux facteurs avec y ~ g1 * g2 pour tracer une boîte par combinaison. Ici la longueur des dents est répartie selon la méthode d’administration (supp) et la dose :

Le vecteur de couleurs se répète par paires, donc les deux suppléments alternent au sein de chaque dose. Une legend() rattache les couleurs au supplément — boxplot() n’ajoute aucune légende lui-même.
Une boîte à moustaches masque la taille d’échantillon et la forme à l’intérieur de chaque groupe. Superposez les points bruts avec stripchart(..., add = TRUE) et perturbez-les pour qu’ils ne s’empilent pas sur une seule ligne :
boxplot(len ~ dose, data = ToothGrowth, frame = FALSE,
outline = FALSE, # hide outliers; the points show them
xlab = "Dose (mg/day)", ylab = "Tooth length",
col = grp_cols)
stripchart(len ~ dose, data = ToothGrowth,
method = "jitter", jitter = 0.15,
vertical = TRUE, pch = 19, cex = 0.7,
col = "#1d4e7a", add = TRUE)
method = "jitter" répartit les points horizontalement ; add = TRUE les dessine sur la boîte à moustaches courante. Nous définissons outline = FALSE sur les boîtes d’abord pour que chaque valeur aberrante apparaisse une fois, comme un véritable point, plutôt que deux fois. Montrer les points transforme un résumé en cinq nombres en une image honnête des données qui le sous-tendent.
Chaque boîte à moustaches encode le même résumé en cinq nombres. Savoir ce que représente chaque partie est ce qui rend le graphique digne d’être tracé :
| Partie de la boîte | Ce qu’elle montre |
|---|---|
| Ligne à l’intérieur de la boîte | La médiane (le 50e percentile). |
| Bas et haut de la boîte | Les premier et troisième quartiles (25e et 75e percentiles). |
| Hauteur de la boîte | L’écart interquartile (IQR) — les 50 % centraux des données. |
| Moustaches | Atteignent le point le plus éloigné dans la limite de 1.5×IQR de la boîte. |
| Points au-delà des moustaches | Valeurs aberrantes — valeurs au-delà de 1.5×IQR. |
Une boîte haute signifie un groupe dispersé ; une boîte placée plus haut signifie des valeurs plus grandes ; une médiane décentrée dans sa boîte signifie une distribution asymétrique.
Modifiez la formule, les couleurs ou les options et appuyez sur Run — cela s’exécute dans votre navigateur via webR, sans installation.
Demandez à Prova « pourquoi certains points sont-ils dessinés en dehors des moustaches sur ma boîte à moustaches ? » — elle répond avec du code base R que vous pouvez exécuter, donc l’explication est reproductible. The runtime is the judge. Demander à Prova →
Error in boxplot.default(): 'x' is a list… ou une seule boîte apparaît. Vous avez passé un data frame au lieu de la formule. Pour tracer une boîte par groupe, utilisez l’interface formule boxplot(len ~ dose, data = ToothGrowth) — pas boxplot(ToothGrowth).
notch = TRUE affiche un avertissement disant que les encoches sortent des charnières. Avec un groupe petit ou asymétrique, l’encoche peut s’étendre au-delà du quartile, ce qui paraît étrange. C’est inoffensif — l’encoche n’est qu’une aide de comparaison approximative. Si cela vous dérange, le groupe est trop petit pour que l’encoche signifie grand-chose ; retirez notch et comparez les médianes directement.
Appelez boxplot(). Pour une variable, passez le vecteur — boxplot(ToothGrowth$len). Pour une boîte par groupe, utilisez l’interface formule : boxplot(len ~ dose, data = ToothGrowth). Aucun package n’est requis ; elle est livrée avec R de base.
Utilisez la formule y ~ group et nommez le data frame dans data =, par exemple boxplot(len ~ dose, data = ToothGrowth). R trace une boîte par niveau du facteur de regroupement, dans l’ordre de ses niveaux. Passez un vecteur à col pour colorer chaque groupe.
Les moustaches s’étendent de la boîte jusqu’au point de données le plus extrême qui reste dans la limite de 1.5×IQR (1.5 fois l’écart interquartile) de la boîte. Tout point au-delà de cette limite est tracé séparément comme valeur aberrante. Les moustaches ne sont pas le minimum et le maximum, sauf s’il n’y a aucune valeur aberrante.
Ajoutez horizontal = TRUE à l’appel boxplot(). La variable numérique court alors le long de l’axe des x et les groupes s’empilent le long de l’axe des y, donc échangez vos xlab et ylab pour que cela corresponde.
Définissez outline = FALSE. Cela masque les points aberrants sans changer la boîte, la médiane ni les moustaches — cela n’affecte que ce qui est dessiné, pas le résumé. Pour voir aussi les données brutes, superposez les points avec stripchart(..., add = TRUE).
À partir d’iris, dessinez une boîte à moustaches de Sepal.Length par Species qui soit avec encoche, utilise les trois couleurs adaptées au daltonisme ci-dessous, masque les valeurs aberrantes par défaut, et superpose les points de données perturbés.
Utilisez la formule Sepal.Length ~ Species, ajoutez notch = TRUE et outline = FALSE, et passez col = grp_cols. Puis appelez stripchart() avec method = "jitter", vertical = TRUE et add = TRUE.
grp_cols <- c("#3a86d4", "#f4a259", "#5fad56")
boxplot(Sepal.Length ~ Species, data = iris, frame = FALSE,
notch = TRUE, outline = FALSE,
xlab = "Species", ylab = "Sepal length",
col = grp_cols)
stripchart(Sepal.Length ~ Species, data = iris,
method = "jitter", jitter = 0.15,
vertical = TRUE, pch = 19, cex = 0.7,
col = "#1d4e7a", add = TRUE)outline = FALSE empêche les valeurs aberrantes d’être dessinées deux fois ; add = TRUE pose les points sur les boîtes.
Vérification rapide. Vous écrivez boxplot(len ~ dose, data = ToothGrowth, horizontal = TRUE). Le long de quel axe la longueur des dents court-elle maintenant ?
L’axe des x. horizontal = TRUE couche les boîtes sur le côté, donc la variable numérique (len) court le long du bas et les groupes (dose) s’empilent le long de l’axe des y.
:::
boxplot() est la seule fonction dont vous avez besoin pour les boîtes à moustaches en R de base. Passez un vecteur pour une boîte, ou la formule y ~ group pour une boîte par groupe. De là, col/border définissent les couleurs, horizontal, notch et varwidth changent la disposition, outline = FALSE masque les valeurs aberrantes, names renomme les groupes, et stripchart(add = TRUE) superpose les données brutes. Lisez la boîte comme un résumé en cinq nombres et elle gagne sa place comme le moyen le plus rapide de comparer des distributions.
legend() dont vous avez besoin pour colorer les boîtes par groupe. · Couleurs en R — construisez des palettes de groupe adaptées au daltonisme. · Boîte à moustaches ggplot2 — l’approche par la grammaire des graphiques avec légendes et thèmes automatiques.Prouvez que vous savez le faire. Maîtrisez toute la série R Base Graphics — 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 : chaque figure a été produite par le code affiché, exécuté lors de la génération du site (si elles s’affichent, le code fonctionne), et le bac à sable se réexécute en direct dans votre navigateur. Modifiez n’importe quel bloc et appuyez sur Run. The runtime is the judge.
@online{2026,
author = {},
title = {Boîte à moustaches en R : la fonction boxplot()},
date = {2026-06-27},
url = {https://www.datanovia.com/learn/data-visualization/r-base/boxplot},
langid = {fr}
}