Graphique en violon en R : un guide ggplot2

Tracez, résumez et personnalisez un graphique en violon ggplot2 — en direct dans votre navigateur

Apprenez à construire un graphique en violon en R avec ggplot2 — montrez la forme complète de la distribution avec geom_violin(), ajoutez des résumés moyenne/médiane, combinez-le avec une boîte à moustaches et colorez par groupe. Modifiez et exécutez le code en direct, sans installation.

Date de publication

20 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Un graphique en violon montre la forme complète de la distribution d’une variable numérique — sa densité reflétée de chaque côté — là où une boîte à moustaches ne montre que les quartiles.
  • Dans ggplot2, vous associez un groupe à x et les valeurs à y, puis vous tracez avec geom_violin().
  • Définissez trim = FALSE pour montrer les queues complètes de la distribution.
  • Ajoutez un résumé avec stat_summary() (moyenne ± écart-type) ou superposez une fine geom_boxplot() à l’intérieur pour la médiane et les quartiles.
  • Révélez les données brutes avec geom_jitter(), et colorez par groupe avec une scale_fill_viridis_d() adaptée au daltonisme.
  • Chaque graphique ci-dessous est rendu pour vous — ajustez ensuite n’importe quel exemple en direct dans le bac à sable.
Obtenez le livre — GGPlot2 Essentials (PDF)

Introduction

Un graphique en violon est le cousin plus expressif de la boîte à moustaches : au lieu de la seule médiane et des quartiles, il dessine la densité de la variable — une courbe de distribution reflétée — pour que vous puissiez voir la forme. Cela en fait l’outil adapté lorsqu’une distribution peut être bimodale ou asymétrique, ce qu’une boîte à moustaches masquerait. En R, ggplot2 en dessine un avec une seule couche, geom_violin(), et vous laisse superposer des résumés et des points bruts par-dessus. 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 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).

Construire le graphique

Associez dose à l’axe des x et len à l’axe des y, puis ajoutez une seule couche de violon. Comme dose est stockée sous forme de nombre, enveloppez-la dans factor() pour que ggplot2 dessine un violon par groupe.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_violin(fill = "#3a86d4", alpha = 0.7) +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 violin plot of tooth length (len) by vitamin C dose; each violin shows the distribution shape per group.

Montrer les queues complètes : trim = FALSE

Par défaut, ggplot2 tronque chaque violon à l’étendue des données. Définissez trim = FALSE pour étendre l’estimation de densité jusque dans les queues — souvent une image plus fidèle de la forme de la distribution.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_violin(trim = FALSE, fill = "#3a86d4", alpha = 0.7) +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 violin plot of tooth length by dose with trim = FALSE, so the density tails extend beyond the data range.

Ajouter des statistiques de résumé

Un violon montre la forme mais aucun chiffre. Superposez stat_summary() pour marquer la moyenne avec une plage de ± un écart-type — aucun package supplémentaire n’est nécessaire, juste des fonctions de base de R.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_violin(trim = FALSE, fill = "#3a86d4", alpha = 0.6) +
  stat_summary(
    fun = mean,
    fun.min = function(x) mean(x) - sd(x),
    fun.max = function(x) mean(x) + sd(x),
    geom = "pointrange"
  ) +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 violin plot of tooth length by dose with a point at each group mean and a vertical line spanning one standard deviation.

Combiner avec une boîte à moustaches

Pour la médiane et les quartiles, superposez une fine geom_boxplot() à l’intérieur du violon — une combinaison courante et riche en informations.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_violin(trim = FALSE, fill = "#3a86d4", alpha = 0.6) +
  geom_boxplot(width = 0.1, fill = "white") +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 violin plot of tooth length by dose with a narrow boxplot drawn inside each violin showing the median and quartiles.

Montrer les données : ajouter des points dispersés

Superposez geom_jitter() pour montrer chaque observation, décalée latéralement pour que les points ne se chevauchent pas — pratique quand les tailles d’échantillon sont petites.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_violin(trim = FALSE) +
  geom_jitter(width = 0.08, alpha = 0.4, color = "#3a86d4") +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 violin plot of tooth length by dose with individual jittered data points overlaid on each violin.

Colorer par groupe

Associez la variable de regroupement à fill pour colorer chaque violon. Utilisez une palette viridis adaptée au daltonisme pour que la figure reste lisible par tous, en couleur ou à l’impression. fill peint l’intérieur ; colour définit le contour.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = factor(dose))) +
  geom_violin(trim = FALSE) +
  scale_fill_viridis_d() +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Dose") +
  theme_minimal()

ggplot2 violin plot of tooth length by dose, each violin filled with a colourblind-safe viridis colour.

Comparer plusieurs groupes

Associez une seconde variable à fill pour comparer les groupes au sein de chaque dose ; ggplot2 place les violons côte à côte (décalés) automatiquement.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = supp)) +
  geom_violin(trim = FALSE) +
  scale_fill_viridis_d() +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Supplement") +
  theme_minimal() +
  theme(legend.position = "top")

ggplot2 grouped violin plot of tooth length by dose, with orange-juice and ascorbic-acid violins side by side at each dose.

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 du graphique en violon avec seaborn arrive dans la série Python.

🟢 Avec un agent IA

Demandez à Prova « la distribution à la dose 2 est-elle bimodale, ou simplement large ? » — elle répond avec du code que vous pouvez exécuter sur ces données, pour que l’explication soit reproductible. The runtime is the judge. Ask Prova →

Questions fréquentes

Une boîte à moustaches (geom_boxplot()) ne montre que la médiane et les quartiles, tandis qu’un graphique en violon (geom_violin()) dessine la densité complète des données reflétée de chaque côté, ce qui vous permet de voir la forme de la distribution — y compris si elle est asymétrique ou bimodale, ce qu’une boîte à moustaches masquerait.

Votre variable de regroupement est probablement stockée sous forme de nombre, si bien que ggplot2 traite x comme une variable continue. Enveloppez-la dans factor(), par exemple aes(x = factor(dose), y = len), pour dessiner un violon par groupe.

Pour la moyenne, superposez stat_summary(fun = mean, geom = "pointrange", ...) et utilisez fun.min/fun.max pour couvrir ± un écart-type. Pour la médiane et les quartiles, superposez une fine geom_boxplot(width = 0.1) à l’intérieur du violon.

Par défaut, ggplot2 tronque chaque violon à l’étendue des données ; geom_violin(trim = FALSE) étend l’estimation de densité jusque dans les queues, donnant souvent une image plus fidèle de la forme de la distribution.

Associez la variable de regroupement à fill (par exemple aes(fill = factor(dose))) pour que chaque violon soit coloré, et ajoutez scale_fill_viridis_d() pour une palette adaptée au daltonisme. fill peint l’intérieur tandis que colour définit le contour.

Testez vos connaissances

Complétez le code pour qu’une boîte à moustaches étroite soit dessinée à l’intérieur de chaque violon afin de montrer la médiane et les quartiles.

# Add geom_boxplot() with a small width, e.g. width = 0.1
library(ggplot2) ggplot(ToothGrowth, aes(x = factor(dose), y = len)) + geom_violin(trim = FALSE) + geom_boxplot(width = 0.1, fill = "white")
library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_violin(trim = FALSE) +
  geom_boxplot(width = 0.1, fill = "white")

Conclusion

Vous avez construit un graphique en violon ggplot2, étendu ses queues avec trim = FALSE, ajouté un résumé moyenne ± écart-type, combiné avec une boîte à moustaches pour la médiane et les quartiles, superposé les données brutes et comparé des groupes avec une palette adaptée au daltonisme. Ensuite, comparez-le avec la boîte à moustaches (quartiles uniquement) et le nuage de points, et explorez 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 = {Graphique en violon en R : un guide ggplot2},
  date = {2026-06-20},
  url = {https://www.datanovia.com/learn/data-visualization/ggplot2/violin-plot},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Graphique en violon en R : un guide ggplot2.” 2026. June 20. https://www.datanovia.com/learn/data-visualization/ggplot2/violin-plot.