Graphiques R · Boîte à moustaches

Comprendre les distributions avec les boîtes à moustaches dans R

Des exemples pratiques pour lire et concevoir des boîtes à moustaches, d’une seule distribution aux comparaisons de groupes, aux données superposées et aux graphiques interactifs.

14 exemplesCode R reproductible
Avant de commencer

Une vue synthétique de toute une distribution

Les boîtes à moustaches révèlent la tendance centrale, la dispersion, l’asymétrie et les valeurs potentiellement aberrantes sans afficher chaque observation. Elles sont particulièrement utiles pour comparer plusieurs groupes côte à côte sur une même échelle.

Exemples
14
Niveaux
Débutant + Intermédiaire
01
Exemple 01R de baseDébutant

Commencer par une boîte à moustaches simple

Une boîte à moustaches résume une distribution numérique par sa médiane, ses quartiles, ses moustaches et ses valeurs potentiellement aberrantes.

Commencer par une boîte à moustaches simple : exemple généré dans R
Résultat de l’exemple généré dans R.

La boîte couvre l’intervalle interquartile, le trait central marque la médiane et les moustaches atteignent les valeurs les plus extrêmes situées à moins de 1,5 fois l’écart interquartile des quartiles.

RExécuter ce code
boxplot(iris$Sepal.Length,
        main = "Sepal length",
        ylab = "Centimetres")
02
Exemple 02R de baseDébutant

Orienter la boîte à moustaches horizontalement

Une boîte horizontale présente la distribution de gauche à droite et peut faciliter la lecture des longs libellés.

Orienter la boîte à moustaches horizontalement : exemple généré dans R
Résultat de l’exemple généré dans R.

Indiquez horizontal = TRUE et remplacez le libellé de l’axe vertical par celui de l’axe horizontal. Le résumé statistique reste inchangé ; seule l’orientation diffère.

RExécuter ce code
boxplot(iris$Sepal.Length, horizontal = TRUE,
        col = "#dbeafe", border = "#2563eb",
        main = "Horizontal boxplot", xlab = "Centimetres")
03
Exemple 03R de baseDébutant

Choisir une palette de couleurs claire

Des couleurs de remplissage et de contour bien choisies distinguent les distributions tout en préservant la structure statistique de la boîte.

Choisir une palette de couleurs claire : exemple généré dans R
Résultat de l’exemple généré dans R.

Utilisez col pour le remplissage et border pour le contour. Des couleurs sobres mettent en valeur la médiane, les moustaches et les valeurs aberrantes.

RExécuter ce code
boxplot(iris$Sepal.Length,
        col = "#2563eb", border = "#172554",
        main = "Boxplot with color", ylab = "Centimetres")
04
Exemple 04R de baseDébutant

Comparer les distributions par groupe

Des boîtes groupées placent plusieurs distributions sur une même échelle pour comparer directement leurs tendances centrales, leurs dispersions et leurs valeurs aberrantes.

Comparer les distributions par groupe : exemple généré dans R
Résultat de l’exemple généré dans R.

La notation par formule sépare la variable à expliquer, à gauche, de la variable de groupe, à droite. Ici, la longueur des sépales est comparée entre trois espèces d’iris.

RExécuter ce code
boxplot(Sepal.Length ~ Species, data = iris,
        col = c("#bfdbfe", "#60a5fa", "#1d4ed8"),
        main = "Sepal length by species",
        xlab = "Species", ylab = "Centimetres")
05
Exemple 05R de baseDébutant

Ajouter des encoches autour de la médiane

Une boîte à encoches ajoute un intervalle de confiance approximatif autour de chaque médiane pour faciliter une comparaison visuelle prudente.

Ajouter des encoches autour de la médiane : exemple généré dans R
Résultat de l’exemple généré dans R.

Indiquez notch = TRUE. Des encoches qui ne se chevauchent pas suggèrent une différence entre médianes, mais le graphique reste un outil exploratoire et ne remplace pas une inférence formelle.

RExécuter ce code
boxplot(Sepal.Length ~ Species, data = iris,
        notch = TRUE, col = "#bfdbfe",
        main = "Notched boxplots",
        xlab = "Species", ylab = "Centimetres")
06
Exemple 06R de baseDébutant

Montrer les tailles relatives des échantillons

Les boîtes de largeur variable sont dimensionnées selon la racine carrée de l’effectif de chaque groupe.

Montrer les tailles relatives des échantillons : exemple généré dans R
Résultat de l’exemple généré dans R.

Indiquez varwidth = TRUE lorsque les groupes ont des effectifs différents. La largeur apporte alors une information utile sur la taille des échantillons sans modifier les quartiles.

RExécuter ce code
set.seed(42)
group <- rep(c("Small", "Medium", "Large"), c(20, 45, 90))
value <- rnorm(length(group), rep(c(4.8, 5.5, 6.2), c(20, 45, 90)))
boxplot(value ~ group, varwidth = TRUE, col = "#93c5fd",
        main = "Width reflects sample size", ylab = "Value")
07
Exemple 07R de baseDébutant

Présenter et interpréter les valeurs aberrantes

Les points au-delà des moustaches sont des valeurs potentiellement aberrantes selon la règle des boîtes à moustaches ; ce ne sont pas automatiquement des erreurs ou des observations à supprimer.

Présenter et interpréter les valeurs aberrantes : exemple généré dans R
Résultat de l’exemple généré dans R.

Les arguments outpch, outcol et outcex contrôlent leur apparence. Examinez les observations inhabituelles dans leur contexte avant toute décision analytique.

RExécuter ce code
set.seed(42)
values <- c(rnorm(80, 10, 1.2), 14.5, 15.2)
boxplot(values, col = "#dbeafe", border = "#2563eb",
        outpch = 19, outcol = "#dc2626", outcex = 1.2,
        main = "Potential outliers", ylab = "Value")
08
Exemple 08R de baseIntermédiaire

Superposer les observations individuelles

Une superposition de points légèrement décalés combine le résumé de la distribution avec les observations brutes qui le produisent.

Superposer les observations individuelles : exemple généré dans R
Résultat de l’exemple généré dans R.

Tracez d’abord la boîte, puis ajoutez stripchart() avec un décalage aléatoire. Cette méthode est particulièrement utile pour les petits et moyens échantillons, dont la densité reste lisible.

RExécuter ce code
boxplot(Sepal.Length ~ Species, data = iris,
        col = "#dbeafe", outline = FALSE,
        main = "Boxplots with observations", ylab = "Centimetres")
stripchart(Sepal.Length ~ Species, data = iris,
           vertical = TRUE, method = "jitter", add = TRUE,
           pch = 19, col = adjustcolor("#172554", 0.45))
09
Exemple 09R de baseIntermédiaire

Comparer plusieurs variables numériques

Des boîtes côte à côte résument plusieurs variables numériques lorsqu’elles partagent des unités et des échelles compatibles.

Comparer plusieurs variables numériques : exemple généré dans R
Résultat de l’exemple généré dans R.

Transmettre un tableau de données numériques crée une boîte par colonne. Standardisez d’abord les variables si leurs unités ou leurs ordres de grandeur ne sont pas directement comparables.

RExécuter ce code
boxplot(iris[1:4],
        col = c("#dbeafe", "#bfdbfe", "#93c5fd", "#60a5fa"),
        main = "Iris measurements",
        ylab = "Centimetres", las = 2)
10
Exemple 10R de baseIntermédiaire

Utiliser une échelle logarithmique pour les données asymétriques

Un axe logarithmique facilite la comparaison de distributions positives très asymétriques en comprimant les grandes valeurs.

Utiliser une échelle logarithmique pour les données asymétriques : exemple généré dans R
Résultat de l’exemple généré dans R.

Indiquez log = "y" pour une boîte verticale. Les logarithmes n’étant pas définis pour les valeurs nulles ou négatives, vérifiez les données avant cette transformation.

RExécuter ce code
set.seed(42)
group <- rep(c("A", "B", "C"), each = 60)
value <- rlnorm(180, meanlog = rep(c(1, 1.5, 2), each = 60))
boxplot(value ~ group, log = "y", col = "#93c5fd",
        main = "Skewed data on a log scale", ylab = "Value (log scale)")
11
Exemple 11R de baseIntermédiaire

Trier les groupes selon leur médiane

Réordonner les catégories selon une statistique de synthèse révèle des classements et des structures que l’ordre alphabétique peut masquer.

Trier les groupes selon leur médiane : exemple généré dans R
Résultat de l’exemple généré dans R.

Utilisez reorder() dans la formule pour trier les groupes selon leur médiane. C’est particulièrement utile lorsque le graphique comporte de nombreuses catégories.

RExécuter ce code
set.seed(42)
data <- data.frame(
  group = rep(c("North", "South", "East", "West"), each = 45),
  value = rnorm(180, rep(c(7, 4, 6, 5), each = 45))
)
boxplot(value ~ reorder(group, value, median), data = data,
        col = "#93c5fd", xlab = "Group ordered by median",
        ylab = "Value")
12
Exemple 12R de baseIntermédiaire

Ajouter les moyennes des groupes

Les marqueurs de moyenne complètent le trait de médiane et peuvent révéler une asymétrie lorsque les deux mesures de tendance centrale diffèrent.

Ajouter les moyennes des groupes : exemple généré dans R
Résultat de l’exemple généré dans R.

Calculez les moyennes par groupe avec tapply(), puis ajoutez-les aux positions des boîtes correspondantes. Utilisez un symbole distinct et expliquez-le dans une légende.

RExécuter ce code
boxplot(Sepal.Length ~ Species, data = iris,
        col = "#dbeafe", main = "Medians and means",
        ylab = "Centimetres")
means <- tapply(iris$Sepal.Length, iris$Species, mean)
points(seq_along(means), means, pch = 23,
       bg = "#f59e0b", col = "#92400e", cex = 1.4)
legend("topleft", "Mean", pch = 23, pt.bg = "#f59e0b", bty = "n")
13
Exemple 13ggplot2Intermédiaire

Créer une boîte à moustaches avec ggplot2

ggplot2 construit les boîtes par couches, ce qui facilite l’association des variables à la position, au remplissage et aux autres propriétés visuelles.

Créer une boîte à moustaches avec ggplot2 : exemple généré dans R
Résultat de l’exemple généré dans R.

geom_boxplot() calcule automatiquement le résumé statistique à cinq nombres. Ajoutez geom_jitter() pour montrer également les observations sous-jacentes.

RExécuter ce code
install.packages("ggplot2") # Run once
library(ggplot2)
ggplot(iris, aes(x = Species, y = Sepal.Length, fill = Species)) +
  geom_boxplot(width = 0.65, show.legend = FALSE) +
  labs(title = "Sepal length by species",
       x = "Species", y = "Centimetres") +
  theme_minimal()
14
Exemple 14plotlyIntermédiaire

Créer une boîte à moustaches interactive avec plotly

Une boîte plotly ajoute des détails au survol, le zoom, le déplacement de la vue et, si souhaité, l’affichage des observations individuelles.

Créer une boîte à moustaches interactive avec plotly : exemple généré dans R
Résultat de l’exemple généré dans R.

plot_ly() produit un composant HTML interactif. Indiquer boxpoints = "all" affiche chaque observation à côté du résumé statistique.

RExécuter ce code
install.packages("plotly") # Run once
library(plotly)
plot_ly(iris, x = ~Species, y = ~Sepal.Length,
        color = ~Species, type = "box",
        boxpoints = "all", jitter = 0.3, pointpos = 0) %>%
  layout(title = "Interactive boxplot",
         xaxis = list(title = "Species"),
         yaxis = list(title = "Centimetres"))