Histogramme en R : guide ggplot2

Tracer, regrouper en classes et grouper un histogramme ggplot2 — en direct dans votre navigateur

Apprenez à construire un histogramme en R avec ggplot2 — tracez-le avec geom_histogram(), maîtrisez les classes, ajoutez une ligne de moyenne et une courbe de densité, et comparez des groupes. Modifiez et exécutez le code en direct, sans aucune installation.

Date de publication

20 juin 2026

Modifié

8 juillet 2026

AstucePoints clés
  • Un histogramme montre la distribution d’une seule variable numérique en comptant les observations dans des classes de largeur égale.
  • Dans ggplot2, vous associez la variable à x, puis tracez avec geom_histogram().
  • Réglez toujours les classes vous-même — binwidth (ou bins) — car les 30 classes par défaut racontent rarement la bonne histoire.
  • fill colore l’intérieur de la barre, colour son contour ; réglez-les indépendamment.
  • Ajoutez une geom_vline() à la moyenne, ou passez l’axe des y en densité (after_stat(density)) et superposez une courbe geom_density().
  • Comparez des groupes en associant une variable de groupement à fill, avec une palette adaptée au daltonisme (scale_fill_viridis_d()).
  • Pour des groupes qui se chevauchent, utilisez position = "identity" avec alpha (semi-transparence) ; "dodge" et "stack" sont les autres dispositions.
  • 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

Un histogramme est le moyen le plus rapide de voir la forme d’une seule variable numérique : où se regroupent les valeurs, si la distribution est asymétrique, et s’il existe plusieurs pics. En R, ggplot2 en trace un avec une seule couche — geom_histogram() — et rend facile la maîtrise des classes, l’ajout d’une ligne de moyenne, la superposition d’une courbe de densité et la comparaison de groupes. Cette leçon en construit un pas à pas ; les figures sont rendues ici même, et vous pouvez réexécuter ou modifier n’importe laquelle d’entre elles en direct.

Nous utilisons le jeu de données intégré ToothGrowth : la longueur des cellules odontoblastes (len) chez des cobayes recevant de la vitamine C à trois doses (dose : 0,5, 1 ou 2 mg/jour) selon deux modes d’administration (supp : jus d’orange OJ ou acide ascorbique VC). L’histogramme montre comment les valeurs de len sont distribuées.

Construire le graphique

Associez len à l’axe des x et ajoutez une seule couche d’histogramme. ggplot2 compte les observations dans des classes et trace une barre par classe.

library(ggplot2)
ggplot(ToothGrowth, aes(x = len)) +
  geom_histogram(fill = "#3a86d4", alpha = 0.7) +
  labs(x = "Tooth length", y = "Count") +
  theme_minimal()

ggplot2 histogram of tooth length (len); the bars show how many guinea pigs fall in each length range.

Lorsque vous exécutez ceci, vous verrez un message : « stat_bin() using bins = 30. » C’est ggplot2 qui vous avertit qu’il a choisi les classes à votre place — et 30 n’est presque jamais le bon nombre. La section suivante corrige cela.

Maîtriser les classes

Le choix le plus important d’un histogramme est la taille des classes. Réglez-la explicitement avec binwidth (la largeur de chaque barre, dans les unités de votre variable) ou bins (le nombre de barres à répartir sur l’étendue des valeurs). Trop large, vous brouillez la forme ; trop étroit, vous voyez du bruit. Réglez-en toujours un — ne livrez jamais le réglage silencieux des 30 classes par défaut.

library(ggplot2)
ggplot(ToothGrowth, aes(x = len)) +
  geom_histogram(binwidth = 3, fill = "#3a86d4", alpha = 0.7) +
  labs(x = "Tooth length", y = "Count") +
  theme_minimal()

ggplot2 histogram of tooth length with a binwidth of 3, giving wider, smoother bars than the default.

Vous préférez un nombre fixe de barres ? Passez bins plutôt que binwidth :

library(ggplot2)
ggplot(ToothGrowth, aes(x = len)) +
  geom_histogram(bins = 15, fill = "#3a86d4", alpha = 0.7) +
  labs(x = "Tooth length", y = "Count") +
  theme_minimal()

ggplot2 histogram of tooth length split into 15 bins of equal width.

Changer les couleurs du contour et du remplissage

Deux attributs esthétiques contrôlent la couleur d’une barre : fill colore l’intérieur, colour le contour. Réglez- les indépendamment — un contour contrasté rend les barres voisines plus faciles à distinguer. Pour des palettes personnalisées, ColorBrewer ou en niveaux de gris par groupe, consultez le guide des couleurs ggplot2.

library(ggplot2)
ggplot(ToothGrowth, aes(x = len)) +
  geom_histogram(binwidth = 3, fill = "#3a86d4", colour = "grey30") +
  labs(x = "Tooth length", y = "Count") +
  theme_minimal()

ggplot2 histogram of tooth length with azure-filled bars and a dark grey outline on each bar.

Ajouter une ligne de moyenne

Une ligne de référence verticale à la moyenne ancre la distribution. Ajoutez-la avec geom_vline(), en pointant xintercept vers mean(len).

library(ggplot2)
ggplot(ToothGrowth, aes(x = len)) +
  geom_histogram(binwidth = 3, fill = "#3a86d4", alpha = 0.7) +
  geom_vline(xintercept = mean(ToothGrowth$len),
             colour = "red", linetype = "dashed", linewidth = 1) +
  labs(x = "Tooth length", y = "Count") +
  theme_minimal()

ggplot2 histogram of tooth length with a dashed red vertical line marking the overall mean length.

Densité sur l’axe des y et courbe de densité

Par défaut, l’axe des y est un effectif. Pour superposer une courbe de densité lisse, placez d’abord l’histogramme sur la même échelle en associant l’axe des y à la densité avec after_stat(density), puis ajoutez geom_density(). (after_stat() est le remplaçant moderne de l’ancien raccourci ..density...) Pour la courbe de densité comme graphique à part entière, consultez la leçon sur le graphique de densité.

library(ggplot2)
ggplot(ToothGrowth, aes(x = len, y = after_stat(density))) +
  geom_histogram(binwidth = 3, fill = "#3a86d4", alpha = 0.7) +
  geom_density(colour = "#1b3a5b", linewidth = 1) +
  labs(x = "Tooth length", y = "Density") +
  theme_minimal()

ggplot2 histogram of tooth length on a density y-axis with a smooth density curve overlaid in dark blue.

Histogramme par groupe

Pour comparer des distributions entre groupes, associez la variable de groupement à fill. Utilisez une palette viridis adaptée au daltonisme afin que la figure reste lisible pour tout le monde, en couleur comme à l’impression.

library(ggplot2)
ggplot(ToothGrowth, aes(x = len, fill = supp)) +
  geom_histogram(binwidth = 3, alpha = 0.7, position = "identity") +
  scale_fill_viridis_d() +
  labs(x = "Tooth length", y = "Count", fill = "Supplement") +
  theme_minimal()

ggplot2 histogram of tooth length filled by supplement, with orange-juice and ascorbic-acid bars in viridis colours.

Position : superposées, juxtaposées ou empilées

Lorsque des barres de groupes différents tombent dans la même classe, l’ajustement de position décide de leur disposition. "identity" les superpose (associez-le à alpha, ci-dessous), "dodge" les juxtapose côte à côte, et "stack" (le réglage par défaut) les empile les unes sur les autres.

library(ggplot2)
ggplot(ToothGrowth, aes(x = len, fill = supp)) +
  geom_histogram(binwidth = 3, position = "dodge") +
  scale_fill_viridis_d() +
  labs(x = "Tooth length", y = "Count", fill = "Supplement") +
  theme_minimal()

ggplot2 grouped histogram of tooth length with supplement bars interleaved side by side using position dodge.

Semi-transparence pour les groupes qui se chevauchent

Avec position = "identity", les histogrammes des groupes se superposent, donc réglez alpha en dessous de 1 pour voir à travers le chevauchement. C’est la façon la plus nette de comparer deux distributions sur le même axe.

library(ggplot2)
ggplot(ToothGrowth, aes(x = len, fill = supp)) +
  geom_histogram(binwidth = 3, position = "identity", alpha = 0.5) +
  scale_fill_viridis_d() +
  labs(x = "Tooth length", y = "Count", fill = "Supplement") +
  theme_minimal()

ggplot2 overlaid histogram of tooth length by supplement with semi-transparent bars revealing the overlap between groups.

Lignes de moyenne par groupe

Pour marquer la moyenne de chaque groupe, résumez d’abord les moyennes dans un petit tableau de données, puis passez-le à geom_vline(). Associer colour au groupe à l’intérieur de cette couche garde les lignes en accord avec les remplissages.

library(ggplot2)
group_means <- aggregate(len ~ supp, data = ToothGrowth, FUN = mean)
ggplot(ToothGrowth, aes(x = len, fill = supp)) +
  geom_histogram(binwidth = 3, position = "identity", alpha = 0.5) +
  geom_vline(data = group_means,
             aes(xintercept = len, colour = supp),
             linetype = "dashed", linewidth = 1) +
  scale_fill_viridis_d() +
  scale_colour_viridis_d() +
  labs(x = "Tooth length", y = "Count", fill = "Supplement", colour = "Supplement") +
  theme_minimal()

ggplot2 overlaid histogram of tooth length by supplement with a dashed vertical mean line for each group.

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 d’histogramme matplotlib arrive dans la série Python.

🟢 Avec un agent IA

Demandez à Prova « quelle binwidth montre le mieux la forme de len dans ce jeu de données ? » — elle répond avec du code que vous pouvez exécuter, de sorte que l’explication est reproductible. The runtime is the judge. Ask Prova →

Questions fréquentes

Passez soit binwidth (la largeur de chaque barre dans les unités de votre variable, par exemple geom_histogram(binwidth = 3)), soit bins (un nombre de barres fixe, par exemple geom_histogram(bins = 15)). Réglez-en toujours un vous-même — le réglage silencieux par défaut de 30 classes raconte rarement la bonne histoire.

Ce message signifie que vous avez tracé geom_histogram() sans choisir de taille de classe, donc ggplot2 a choisi 30 classes à votre place. C’est une invitation à régler explicitement binwidth ou bins, plutôt qu’une véritable erreur.

fill colore l’intérieur de la barre tandis que colour trace son contour — ils sont indépendants, par exemple geom_histogram(fill = "#3a86d4", colour = "grey30"). Un contour contrasté rend les barres voisines plus faciles à distinguer.

Ajoutez une couche geom_vline() avec xintercept réglé sur la moyenne, par exemple geom_vline(xintercept = mean(ToothGrowth$len), linetype = "dashed"). Pour une ligne par groupe, résumez d’abord les moyennes avec aggregate() et associez colour au groupe à l’intérieur de geom_vline().

Associez la variable de groupement à fill et utilisez position = "identity" avec alpha en dessous de 1 pour que les barres qui se chevauchent restent visibles, par exemple geom_histogram(position = "identity", alpha = 0.5). Utilisez position = "dodge" pour juxtaposer les barres côte à côte ou "stack" pour les empiler.

Testez vos connaissances

Complétez le code pour que l’histogramme utilise un axe des y en densité et qu’une courbe de densité lisse soit tracée par-dessus.

# Add a geom_density() layer, e.g. geom_density(colour = "#1b3a5b", linewidth = 1)
library(ggplot2) ggplot(ToothGrowth, aes(x = len, y = after_stat(density))) + geom_histogram(binwidth = 3, fill = "#3a86d4", alpha = 0.7) + geom_density(colour = "#1b3a5b", linewidth = 1)
library(ggplot2)
ggplot(ToothGrowth, aes(x = len, y = after_stat(density))) +
  geom_histogram(binwidth = 3, fill = "#3a86d4", alpha = 0.7) +
  geom_density(colour = "#1b3a5b", linewidth = 1)

Conclusion

Vous avez construit un histogramme ggplot2, pris le contrôle des classes, réglé les couleurs du contour et du remplissage, ajouté une ligne de moyenne, basculé vers un axe des y en densité avec une courbe de densité superposée, comparé des groupes par fill, et disposé des barres groupées avec position. Ensuite, explorez la boîte à moustaches pour une comparaison de groupes compacte, 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 = {Histogramme en R : guide ggplot2},
  date = {2026-06-20},
  url = {https://www.datanovia.com/learn/data-visualization/ggplot2/histogram},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Histogramme en R : guide ggplot2.” 2026. June 20. https://www.datanovia.com/learn/data-visualization/ggplot2/histogram.