boxplot() dans R : comment créer BoxGraphiques dans RStudio
⚡ Résumé intelligent
BoxLa fonction `geom_boxplot()` de ggplot2 permet de créer un diagramme en boîte (box plot) en R, qui résume une distribution numérique à l'aide de sa médiane, de ses quartiles, de ses moustaches et de ses valeurs aberrantes. Ce tutoriel explique comment construire un diagramme en boîte à partir du jeu de données sur la qualité de l'air et y ajouter des couleurs, des points, des variations, des encoches et des comparaisons de groupes.
boxplot() dans R
boxplot() dans R permet de visualiser la répartition des données par quartile et de détecter la présence de valeurs aberrantes. Vous pouvez utiliser l'objet géométrique geom_boxplot() de la bibliothèque ggplot2 pour dessiner un boxplot() dans R.
Nous utiliserons le jeu de données sur la qualité de l'air pour introduire la fonction boxplot() dans R avec ggplot. Ce jeu de données enregistre les mesures quotidiennes de la qualité de l'air à New York de mai à septembre 1973 et contient 153 observations. Nous utiliserons les variables suivantes :
- Ozone : variable numérique
- Vent : Variable numérique
- Mois : mai à septembre. Variable numérique
Avant d'en dessiner une, il est utile de savoir exactement ce que représente chaque partie de la boîte.
Comment lire un Box Graphique : Quartiles, écart interquartile et valeurs aberrantes
Chaque élément d'un diagramme en boîte représente une valeur parmi les cinq chiffres récapitulatifs. Savoir à quoi correspond chaque élément transforme le graphique, d'un simple ornement, en un outil d'analyse.
- Charnière inférieure : Le premier quartile, Q1. Vingt-cinq pour cent des observations se situent en dessous.
- Ligne médiane : Le deuxième quartile. Sa position à l'intérieur de la boîte révèle une asymétrie : une ligne décalée vers le bas signifie que les données sont asymétriques à droite.
- Charnière supérieure : le troisième quartile, Q3. Soixante-quinze pour cent des observations se situent en dessous.
- Box la taille: l'écart interquartile, IQR = Q3 – Q1, qui contient la moitié centrale des données et constitue la mesure standard robuste de dispersion.
- Moustaches: Elles s'étendent jusqu'à l'observation la plus extrême qui reste à moins de 1.5 fois l'écart interquartile de la charnière la plus proche. Ce ne sont pas les valeurs minimales et maximales.
- Points au-delà des moustaches : observations signalées comme valeurs aberrantes par cette règle de l'écart interquartile de 1.5.
Deux mises en garde. Premièrement, une valeur aberrante est ici un indicateur statistique, et non une erreur : dans une distribution asymétrique comme celle de la concentration d’ozone, les valeurs élevées sont attendues et ne doivent pas être supprimées. Deuxièmement, un diagramme en boîte masque la forme de la distribution ; ainsi, deux groupes avec des boîtes identiques peuvent présenter des données sous-jacentes très différentes. L’ajout de points aléatoires, comme illustré ci-dessous, permet de pallier ce problème.
Box Graphique vs histogramme vs diagramme en violon dans R
Les trois graphiques décrivent une distribution numérique, mais chacun révèle quelque chose que les autres cachent.
| Critères | Box Terrain | Histogramme | Complot de violon |
|---|---|---|---|
| Spectacles | Médiane, quartiles, valeurs aberrantes | Fréquence dans chaque classe | courbe de densité complète |
| Revplusieurs pics | Non | Oui | Oui |
| Signale les valeurs aberrantes | Oui, explicitement | Uniquement visuel | Pas directement |
| Comparaison de nombreux groupes | Excellent | Gênant | Bon |
| Nécessite un choix de réglage | Non | Oui, comptage des bacs | Oui, la bande passante |
| objet ggplot2 | geom_boxplot() | géom_histogramme() | géom_violon() |
Un compromis courant consiste à tracer un diagramme en violon avec un diagramme en boîte étroit à l'intérieur, ce qui permet de conserver la forme de la densité et le résumé par quartile dans un seul graphique. Voir le Tutoriel sur les histogrammes pour le côté tri de la comparaison.
Créer Box Terrain
Avant de commencer à créer votre premier boxplot() dans R, vous devez manipuler les données comme suit :
- Étape 1 : Importer les données
- Étape 2 : Supprimez les variables inutiles
- Étape 3 : Convertir le mois en un facteur ordonné
- Étape 4 : Créez une nouvelle variable catégorielle divisant chaque mois en trois parties : Début, Milieu et Fin
- Étape 5 : Supprimer les observations manquantes
Toutes ces étapes sont effectuées avec dplyr et l'opérateur de pipeline %>%.
library(dplyr) library(ggplot2) # Step 1 data_air <- airquality %>% #Step 2 select(-c(Solar.R, Temp)) %>% #Step 3 mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")), #Step 4 day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))
Une bonne pratique consiste à vérifier la structure des données avec la fonction glimpse().
glimpse(data_air)
Sortie :
## Observations: 153 ## Variables: 5 ## $ Ozone <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ... ## $ Wind <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6... ## $ Month <ord> May, May, May, May, May, May, May, May, May, May, May,... ## $ Day <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,... ## $ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...
Les fichiers Ozone et Solar.R contiennent tous deux des valeurs NA. Comme la fonction geom_boxplot() les ignorerait silencieusement et afficherait un avertissement, il est préférable de les supprimer explicitement.
# Step 5
data_air_nona <-data_air %>% na.omit()
Boîte à moustaches de base
Représentez maintenant graphiquement la distribution de l'ozone par mois.
# Store the graph box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone)) # Add the geometric object box plot box_plot + geom_boxplot()
Code Explication
- Stockez le graphique pour une utilisation ultérieure
- box_plot : le graphique de base est stocké dans l’objet box_plot, ce qui vous permet d’ajouter des couches ultérieurement sans avoir à répéter l’appel complet.
- Ajouter l'objet géométrique
- Vous transmettez l'ensemble de données data_air_nona à ggplot boxplot.
- À l’intérieur de l’argument aes(), vous ajoutez l’axe des x et l’axe des y.
- Le signe + signifie que vous voulez que R continue à lire le code. Cela rend le code plus lisible en le cassant.
- Utilisez geom_boxplot() pour créer une boîte à moustaches
Sortie :
Changer le côté du graphique
Vous pouvez inverser le côté du graphique.
box_plot +
geom_boxplot()+
coord_flip()
Code Explication
- box_plot : Vous utilisez le graphique que vous avez stocké. Cela évite de réécrire tous les codes à chaque fois que vous ajoutez de nouvelles informations au graphique.
- geom_boxplot() : trace les boîtes et les moustaches
- coord_flip() : Retourner le côté du graphique
Sortie :
Changer la couleur de la valeur aberrante
Vous pouvez modifier la couleur, la forme et la taille des valeurs aberrantes.
box_plot +
geom_boxplot(outlier.colour = "red",
outlier.shape = 2,
outlier.size = 3) +
theme_classic()
Code Explication
- outlier.colour=”red” : Contrôler la couleur des valeurs aberrantes
- outlier.shape=2 : modifiez la forme de la valeur aberrante. 2 fait référence au triangle
- outlier.size=3 : Modifie la taille du triangle. Plus le nombre est grand, plus les marqueurs sont grands.
Sortie :
Ajouter une statistique récapitulative
Vous pouvez superposer une statistique récapitulative telle que la moyenne du groupe, que le diagramme en boîte lui-même n'affiche pas.
box_plot +
geom_boxplot() +
stat_summary(fun.y = mean,
geom = "point",
size = 3,
color = "steelblue") +
theme_classic()
Code Explication
- La fonction stat_summary() ajoute une statistique calculée au-dessus du diagramme en boîte.
- L'argument `fun` détermine la statistique renvoyée. Ici, il s'agit de la moyenne. Notez que les anciennes versions de code utilisent `fun.y`, fonction dépréciée par ggplot2 depuis la version 3.3.0.
- Remarque : D'autres statistiques sont disponibles telles que min et max. Plusieurs statistiques peuvent être affichées dans le même graphique
- geom = « point » : tracez la moyenne avec un point
- size=3 : Taille du point
- color =”steelblue” : Couleur des points
Sortie :
Box Tracer avec des points
Ensuite, ajoutez un calque de nuage de points par-dessus les boîtes. Chaque point représente une observation, ce qui permet de visualiser la taille de l'échantillon derrière chaque boîte.
box_plot +
geom_boxplot() +
geom_dotplot(binaxis = 'y',
dotsize = 1,
stackdir = 'center') +
theme_classic()
Code Explication
- La fonction geom_dotplot() dessine un point par observation, empilé dans chaque intervalle.
- binaxis='y' : change la position des points le long de l'axe y. Par défaut, l'axe des x
- dotsize=1 : Taille des points
- stackdir='center' : Façon d'empiler les points : Quatre valeurs :
- « vers le haut » (par défaut),
- "vers le bas"
- "centre"
- « centre entier »
Sortie :
Contrôle Esthétique du Box Terrain
Changer la couleur de la boîte
Vous pouvez changer les couleurs du groupe.
ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) + geom_boxplot() + theme_classic()
Code Explication
- Les couleurs des groupes sont contrôlées dans la carte aes()pingVous pouvez utiliser la propriété `color=Month` pour modifier la couleur du diagramme en boîte à moustaches en fonction des mois.
Sortie :
Box tracé avec plusieurs groupes
Il est également possible d'ajouter plusieurs groupes. Vous pouvez visualiser la différence de qualité de l'air selon le jour de la mesure.
ggplot(data_air_nona, aes(Month, Ozone)) + geom_boxplot(aes(fill = day_cat)) + theme_classic()
Code Explication
- La carte aes()ping l'objet géométrique contrôle les groupes à afficher (cette variable doit être un facteur)
- aes(fill= day_cat) permet de créer trois cases pour chaque mois sur l'axe des x
Sortie :
Box Tracer avec des points instables
Une autre façon de représenter les observations individuelles consiste à utiliser des points décalés. Le décalage est généralement privilégié lorsqu'un axe des abscisses catégoriel entraîne la présence de nombreux points à la même position.
Cette méthode évite le chevauchementping des données discrètes.
box_plot +
geom_boxplot() +
geom_jitter(shape = 15,
color = "steelblue",
position = position_jitter(width = 0.21)) +
theme_classic()
Code Explication
- La fonction geom_jitter() ajoute un petit déplacement aléatoire à chaque point pour créer un chevauchement.ping Les valeurs deviennent visibles.
- shape=15 change la forme des points. 15 représente les carrés
- color = « steelblue » : Change la couleur du point
- position = position_jitter(width = 0.21) : contrôle le décalage latéral des points, mesuré en unités de l’axe des abscisses. La valeur par défaut est de 40 % de l’espacement entre les catégories.
Sortie :
Vous pouvez voir la différence entre le premier graphique avec la méthode du jitter et le second avec la méthode des points.
box_plot +
geom_boxplot() +
geom_point(shape = 5,
color = "steelblue") +
theme_classic()
Entaillé Box Terrain
Une fonctionnalité intéressante de geom_boxplot() est une fonction de boîte à moustaches encochée dans R. Le diagramme d'encoche rétrécit la boîte autour de la médiane. L’objectif principal d’un diagramme en boîte crantée est de comparer l’importance de la médiane entre les groupes. Il existe des preuves solides que deux groupes ont des médianes différentes lorsque les encoches ne se chevauchent pas. Une encoche est calculée comme suit :
Ici, IQR représente l'écart interquartile et n le nombre d'observations dans le groupe. L'encoche couvre approximativement l'intervalle de confiance à 95 % de la médiane.
box_plot +
geom_boxplot(notch = TRUE) +
theme_classic()
Code Explication
- geom_boxplot(notch = TRUE) : trace le diagramme en boîte avec des encoches autour de la médiane
Sortie :
Comment ajouter des titres, des étiquettes et des couleurs personnalisées à un Box Tracer un graphique dans R
Les graphiques ci-dessus utilisent les paramètres par défaut de ggplot2, qui reprennent les noms des variables directement depuis le cadre de données. Un graphique publiable nécessite des étiquettes lisibles et une palette de couleurs appropriée.
Titres et étiquettes des axes. Un appel à labs() définit chaque élément de texte :
box_plot +
geom_boxplot(fill = "coral", alpha = 0.7) +
labs(title = "Ozone concentration by month",
subtitle = "New York, May to September 1973",
x = "Month",
y = "Ozone (parts per billion)",
caption = "Source: airquality dataset") +
theme_classic()
Choisir vos propres couleurs. Utilisez scale_fill_manual() lorsque le remplissage est mappé à l'intérieur de aes(), et scale_colour_manual() lorsque la couleur est :
ggplot(data_air_nona, aes(x = Month, y = Ozone, fill = Month)) + geom_boxplot() + scale_fill_manual(values = c("#0e9cd1", "coral", "#7dc27d", "#c9a227", "grey60")) + theme_classic() + theme(legend.position = "none")
La légende est désactivée ici car l'axe des abscisses indique déjà le nom de chaque mois ; la répéter gaspillerait donc de l'espace.
Réorganiser les boîtes. Le niveau du facteur détermine l'ordre sur l'axe. Le facteur « Mois » étant ordonné, il est déjà classé chronologiquement. Pour un facteur non ordonné, triez plutôt par la médiane.
ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) + geom_boxplot() + theme_classic()
Enregistrement du graphique. La fonction ggsave() enregistre le dernier graphique sur le disque à une résolution que vous contrôlez :
ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)
Box Graphique en R : Code Références
Le tableau ci-dessous répertorie l'appel ggplot2 pour chaque variante de diagramme en boîte présentée ci-dessus :
| Objectif | Code |
|---|---|
| Boîte à moustaches de base |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() |
| Inverser l'orientation |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip() |
| Boîte à moustaches entaillée |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE) |
| Box tracé avec des points instables |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21)) |
| Colorier par groupe |
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot() |
| Plusieurs groupes par catégorie |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2)) |
| Ajouter la moyenne du groupe |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point") |
Vérifiez également: - Tutoriel R pour les débutants : apprendre le langage de programmation R












