Comment ajouter les valeurs sur un histogramme avec R ggplot2
L'histogramme est un outil fondamental en visualisation statistique, permettant de représenter la distribution d'une variable numérique. Dans l'écosystème R, le package ggplot2 est sans doute la solution la plus répandue pour construire des graphiques à la fois élégants et personnalisables. Ce tutoriel vous guide pas à pas pour créer un histogramme avec ggplot2 et surtout pour y ajouter les valeurs numériques au-dessus des barres, une fonctionnalité très utile lors de la présentation des résultats.
Introduction à ggplot2 et aux histogrammes
Le package ggplot2 repose sur le principe fondamental de la grammaire des graphiques. Chaque graphique est construit en « couches » superposées : on démarre avec un canevas via la fonction ggplot(), puis on ajoute des géométries comme les barres d'un histogramme avec geom_histogram(). Le mapping, ou assignation, des variables aux esthétiques du graphique (axe x, couleur, taille, etc.) s'effectue dans l'argument aes(). Pour un histogramme, il suffit généralement de spécifier une variable à l'axe des x.
Par défaut, ggplot2 crée 30 intervalles (ou « bins ») pour l'histogramme, mais vous pouvez ajuster leur nombre via l'argument bins ou bien définir explicitement la largeur des intervalles avec binwidth. Trouver la bonne taille d'intervalle est crucial : trop large, vous perdez la forme détaillée de la distribution ; trop étroit, vous obtenez un graphique bruyant.
Construire un histogramme simple avec ggplot2
Supposons que nous utilisons la variable Sepal.Length du célèbre jeu de données intégré iris. Le code minimal est :
library(ggplot2)ggplot(iris, aes(x = Sepal.Length)) + geom_histogram(binwidth = 0.5, fill = "skyblue", color = "black") + theme_minimal()
Ce code affiche un histogramme aux intervalles larges de 0,5 unité, avec des barres bleues claires et un contour noir pour bien distinguer les barres.
Lire aussi: Modifier Activité Kbis Auto-Entrepreneur
Ajouter les valeurs au-dessus de chaque barre de l’histogramme
Pour rendre votre graphique plus lisible et informatif, il est fréquent d'ajouter des valeurs numériques au-dessus des barres, montrant par exemple le nombre d'observations dans chaque intervalle ou bien un pourcentage des données. Cette fonctionnalité n'est pas automatique avec geom_histogram(), mais peut être obtenue en combinant geom_histogram() et stat_bin() avec geom_text().
Exemple simple d’ajout de valeurs absolues au-dessus des barres
Voici une manière classique d'ajouter les effectifs (nombres) de chaque intervalle au-dessus des barres :
ggplot(iris, aes(x = Sepal.Length)) + geom_histogram(binwidth = 0.5, fill = "lightgreen", color = "black") + stat_bin(binwidth = 0.5, geom = "text", aes(label = ..count..), vjust = -0.5) + theme_minimal()
Explications :
- stat_bin() recalcule les comptes selon les mêmes intervalles que geom_histogram().
- geom = "text" indique que nous voulons afficher du texte au lieu de barres.
- aes(label = ..count..) affiche la variable calculée count (nombre d'observations) de chaque bin.
- vjust = -0.5 positionne le texte légèrement au-dessus des barres.
Afficher les pourcentages au-dessus des barres
Pour exprimer la hauteur des barres en pourcentage des observations totales et afficher ces pourcentages, il faut un calcul supplémentaire :
ggplot(iris, aes(x = Sepal.Length)) + geom_histogram(binwidth = 0.5, fill = "salmon", color = "black", aes(y = ..count../sum(..count..))) + stat_bin(binwidth = 0.5, geom = "text", aes(label = scales::percent(..count../sum(..count..))), vjust = -0.5) + scale_y_continuous(labels = scales::percent_format()) + theme_minimal()
Ici :
Lire aussi: INPI et Micro-Entreprise : Démarches
- On remplace la hauteur de la barre par une proportion : y = ..count../sum(..count..), soit le pourcentage de la population totale.
- Les étiquettes affichent le taux en pourcentage, formaté avec scales::percent().
- L’axe y est ajusté pour afficher des pourcentages avec scale_y_continuous(labels = scales::percent_format()).
Personnaliser les intervalles de l’histogramme
Il est possible d’affiner l’aspect des plages (intervalle ou « bin ») grâce aux arguments suivants :
- binwidth pour contrôler largeur fixe du bin.
- bins pour demander un nombre précis de bacs.
- center pour centrer les bacs sur une valeur particulière.
- boundary pour fixer la valeur des bords des intervalles sur l’axe x.
- breaks pour définir manuellement les limites des intervalles (plus avancé).
Exemple pour centrer les intervalles :
geom_histogram(binwidth = 1, center = 0)
Et pour fixer à partir de 0 les limites des intervalles avec une largeur 1 :
geom_histogram(binwidth = 1, boundary = 0)
Trucs et astuces pour des histogrammes avancés
- Couleurs : vous pouvez séparer les barres par groupe (variable qualitative) en utilisant l’esthétique fill dans aes(). Par exemple, aes(fill = Species) colorera les barres selon l’espèce dans iris.
- Superposition des barres : utiliser position = "identity" et modifier alpha dans geom_histogram() pour visualiser les chevauchements de groupes.
- Ligne de moyenne : ajouter une ligne verticale symbolisant la moyenne avec geom_vline().
Exemple : geom_vline(xintercept = mean(iris$Sepal.Length), linetype = "dashed", color = "blue"). - Ajouter une courbe de densité : utiliser geom_density() pour superposer une estimation lisse de la densité à l’histogramme. Pour ajuster l’échelle des y, utilisez aes(y = after_stat(density)) dans geom_histogram().
- Facettes : utilisez facet_wrap() ou facet_grid() pour séparer l’histogramme selon une ou plusieurs variables catégorielles, facilitant ainsi la comparaison.
Résumé des commandes clés pour ajouter les valeurs sur un histogramme avec ggplot2
| Fonction | Description | Exemple |
|---|---|---|
| geom_histogram() | Créer un histogramme avec contrôle des bacs | geom_histogram(binwidth=0.5, fill="blue") |
| stat_bin(geom="text") | Ajouter du texte (nombre ou pourcentage) au-dessus des barres | stat_bin(binwidth=0.5, geom="text", aes(label=..count..), vjust=-0.5) |
| geom_vline() | Ajouter une ligne verticale, par ex. la moyenne | geom_vline(xintercept=mean(data$var), linetype="dashed") |
| geom_density() | Ajouter une courbe de densité à l’histogramme | geom_density() |
| facet_wrap() | Créer des sous-graphes selon une variable catégorielle | facet_wrap(~var_catégorielle) |
Exemple complet : histogramme coloré avec valeurs, densité et moyenne
library(ggplot2)library(scales)ggplot(iris, aes(x = Sepal.Length, fill = Species)) + geom_histogram(binwidth = 0.4, position = "dodge", color = "black") + stat_bin(binwidth = 0.4, position = position_dodge(width = 0.4), geom = "text", aes(label = ..count..), vjust = -0.5, size = 3) + geom_density(aes(y = after_stat(density) * 30), alpha = 0.2, position = "identity") + geom_vline(xintercept = mean(iris$Sepal.Length), color = "red", linetype = "dashed") + labs(title = "Histogramme de Sepal.Length par Espèce", x = "Longueur du sépale", y = "Effectif") + theme_minimal()
Ce graphique :
- Affiche les barres pour chaque espèce, côte à côte (position = "dodge").
- Indique le nombre d’observations au-dessus des barres.
- Superpose une courbe de densité pour visualiser la distribution.
- Marque la moyenne générale avec une ligne rouge en pointillés.
Conseils pour la lisibilité des valeurs sur un histogramme
- Positionnez les labels avec un vjust négatif pour qu'ils apparaissent au-dessus des barres.
- Adaptez la taille des labels (size) pour une meilleure lisibilité.
- Utilisez des couleurs contrastées entre les barres et le texte.
- Pour un histogramme groupé ou empilé, assurez-vous que les labels soient correctement décalés avec position_dodge() ou position_stack().
Tracé dans R avec ggplot2 : Histogrammes empilés (Principes de base de la visualisation de données dans R #13)
En conclusion, ggplot2 vous offre une flexibilité exceptionnelle pour créer des histogrammes très précis avec des éléments supplémentaires comme les valeurs numériques au-dessus des barres, des courbes de densité, des lignes de moyenne, et des facettes pour segmenter vos données. L'ajout de ces informations rendra vos graphiques plus parlants et professionnels.
Lire aussi: Comment Calculer la TVA ?
balises:
