library(ggplot2)
ggplot(faithful, aes(x = waiting)) +
geom_density(fill = "#3a86d4", alpha = 0.7) +
labs(x = "Waiting time (min)", y = "Density") +
theme_minimal()
Tracez, colorez et groupez un graphique de densité ggplot2 — en direct dans votre navigateur
Apprenez à construire un graphique de densité en R avec ggplot2 — tracez la distribution d’une variable continue avec geom_density(), ajoutez une ligne de moyenne, colorez la courbe ou remplissez l’aire par groupe, et superposez un histogramme. Modifiez et exécutez le code en direct, sans installation.
20 juin 2026
8 juillet 2026
x et tracez la courbe avec geom_density().aes(y = after_stat(count)).geom_vline().colour = group, ou remplissez l’aire avec fill = group plus un alpha semi-transparent pour que les groupes qui se chevauchent restent lisibles.scale_colour_viridis_d() / scale_fill_viridis_d()) pour les groupes.aes(y = after_stat(density))).Un graphique de densité est le moyen le plus rapide de voir la forme d’une variable continue : où se situe son pic, si elle est asymétrique et si elle possède plus d’un mode — le tout à partir d’une seule courbe lisse. En R, ggplot2 en trace un avec une seule couche — geom_density() — et facilite l’ajout d’une ligne de moyenne, la coloration par groupe et la superposition d’un histogramme. Cette leçon en construit un étape par étape ; les figures sont rendues ici même, et vous pouvez réexécuter ou modifier chacune d’elles en direct.
Nous utilisons deux jeux de données intégrés. Pour les exemples à une seule série, faithful (temps d’attente entre les éruptions du geyser Old Faithful) — sa variable waiting présente une forme nette à deux pics (bimodale) que la courbe de densité met bien en valeur. Pour les exemples groupés, iris — en comparant Sepal.Length entre les trois espèces de fleurs, dont les distributions se séparent nettement.
Associez la variable continue à x et ajoutez une seule couche de densité. ggplot2 estime une courbe de densité lisse à partir des données — aucune décision de regroupement, contrairement à un histogramme.
La courbe montre la forme ; une ligne verticale à la moyenne marque le centre. Ajoutez-la avec geom_vline(), en calculant la moyenne à partir des données.

Pour des données groupées, vous voulez une ligne par groupe. Résumez d’abord les moyennes par groupe avec la fonction aggregate() de base R, puis passez-les à geom_vline() afin que chaque ligne soit colorée pour correspondre à son groupe.
library(ggplot2)
mu <- aggregate(Sepal.Length ~ Species, data = iris, FUN = mean)
ggplot(iris, aes(x = Sepal.Length, colour = Species)) +
geom_density() +
geom_vline(data = mu, aes(xintercept = Sepal.Length, colour = Species),
linetype = "dashed") +
scale_colour_viridis_d() +
labs(x = "Sepal length (cm)", y = "Density", colour = "Species") +
theme_minimal()
Par défaut, l’axe des y est une densité (l’aire sous la courbe vaut 1), ce qui rend comparables des groupes de tailles différentes. Si vous préférez lire des effectifs, associez y à after_stat(count) — cela met la courbe à l’échelle du nombre d’observations.
Deux attributs esthétiques contrôlent l’apparence de la courbe : colour est le contour, fill l’aire en dessous. Adoucissez un remplissage qui se chevauche avec alpha (semi-transparent), et passez le contour à un linetype en tirets lorsque vous voulez que l’aire se lise comme l’élément principal.
Pour comparer des groupes, associez la variable de groupement à colour. ggplot2 trace une courbe par groupe et ajoute automatiquement une légende. Utilisez une palette adaptée au daltonisme comme viridis pour que la figure reste lisible pour tous, en couleur comme à l’impression.
Associer le groupe à fill peint l’aire sous chaque courbe. Comme les courbes se chevauchent, définissez un alpha semi-transparent pour que les deux groupes restent visibles là où ils se croisent.
Un histogramme montre les effectifs bruts regroupés ; une courbe de densité les lisse. Placez les deux sur la même figure en traçant l’histogramme sur l’échelle des y de la densité (aes(y = after_stat(density))) afin que la courbe se superpose par-dessus.

La même superposition fonctionne par groupe — un histogramme translucide derrière la courbe de chaque groupe :
library(ggplot2)
ggplot(iris, aes(x = Sepal.Length, fill = Species, colour = Species)) +
geom_histogram(aes(y = after_stat(density)),
bins = 30, alpha = 0.3, position = "identity") +
geom_density(alpha = 0, linewidth = 1) +
scale_fill_viridis_d() +
scale_colour_viridis_d() +
labs(x = "Sepal length (cm)", y = "Density", fill = "Species", colour = "Species") +
theme_minimal()
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 de densité (KDE) seaborn/matplotlib arrive bientôt dans la série Python.
Demandez à Prova « la forme à deux pics de ce graphique de densité est-elle réelle, ou juste un artefact de lissage dû à la largeur de bande ? » — 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 →
Associez votre variable continue à x et ajoutez une seule couche geom_density(), par exemple ggplot(faithful, aes(x = waiting)) + geom_density(). ggplot2 estime la courbe lisse pour vous — aucun choix de regroupement, contrairement à un histogramme.
Par défaut, geom_density() place la densité sur l’axe des y, de sorte que l’aire sous la courbe vaut 1 et que des groupes de tailles différentes restent comparables. Pour lire plutôt des effectifs, associez y à after_stat(count) avec geom_density(aes(y = after_stat(count))), ce qui met la courbe à l’échelle du nombre d’observations.
Ajoutez geom_vline() avec xintercept = mean(faithful$waiting), plus linetype = "dashed" pour la distinguer de la courbe. Pour des données groupées, calculez d’abord les moyennes par groupe avec aggregate(Sepal.Length ~ Species, data = iris, FUN = mean) et passez ce data frame à geom_vline() afin que chaque ligne corresponde à la couleur de son groupe.
Associez la variable de groupement à colour (aes(x = Sepal.Length, colour = Species)) pour tracer une courbe avec contour par groupe, ou à fill pour peindre l’aire sous chacune. ggplot2 ajoute automatiquement la légende ; utilisez scale_colour_viridis_d() ou scale_fill_viridis_d() pour une palette adaptée au daltonisme.
Lorsque vous associez un groupe à fill, les aires remplies sont opaques par défaut et le groupe au premier plan recouvre les autres. Définissez un alpha semi-transparent tel que geom_density(alpha = 0.5) pour que chaque groupe reste visible là où les courbes se croisent.
Complétez le code pour que l’aire de densité de chaque espèce soit remplie et semi-transparente, avec une palette adaptée au daltonisme.
Vous avez construit un graphique de densité ggplot2, marqué la moyenne avec une ligne verticale (à une seule série et par groupe), basculé l’axe des y entre densité et effectif, stylisé la courbe et son remplissage, coloré et rempli par groupe avec une palette adaptée au daltonisme, et superposé une courbe de densité sur un histogramme. Ensuite, explorez l’histogramme pour les effectifs regroupés, la boîte à moustaches pour un résumé compact de la même distribution, et le reste de la grammaire ggplot2.
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.
Prouvez que vous savez le faire. Maîtrisez toute la série ggplot2 — 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 : 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.
@online{2026,
author = {},
title = {Graphique de densité en R : guide ggplot2},
date = {2026-06-20},
url = {https://www.datanovia.com/learn/data-visualization/ggplot2/density-plot},
langid = {fr}
}