Boîtes à moustaches et violons en R (ggpubr)

Des boîtes à moustaches et graphiques en violon prêts à publier en un seul appel — colorés par groupe, avec jitter, encoches et lignes de quantiles

Créez des boîtes à moustaches et des graphiques en violon prêts à publier en R avec ggpubr. Utilisez ggboxplot() pour les boîtes — colorées ou remplies par groupe, avec points jitterés, encoches, ordonnées ou horizontales — et ggviolin() pour les violons — avec une boîte à moustaches intérieure, des lignes de quantiles et un rognage. Chaque exemple est rendu pour vous et s’exécute en direct dans votre navigateur.

Date de publication

22 juin 2026

Modifié

8 juillet 2026

AstucePoints clés
  • ggboxplot() trace une boîte à moustaches prête pour la revue en un seul appel : colorez ou remplissez par groupe avec color =/fill = + une palette nommée ("jco", "npg", …).
  • Ajoutez les données brutes avec add = "jitter", comparez honnêtement les médianes avec des boîtes à encoche (notch = TRUE), et contrôlez l’ordre des groupes avec order =.
  • Passez à l’horizontale avec rotate = TRUE — pratique quand les étiquettes de catégories sont longues.
  • ggviolin() montre la forme complète de la distribution ; insérez une boîte à moustaches dedans avec add = "boxplot" et tracez les quartiles avec draw_quantiles = c(0.25, 0.5, 0.75).
  • ggpubr applique theme_pubr() automatiquement, si bien que les graphiques semblent prêts à publier d’emblée — vous n’ajoutez pas de thème.
  • Besoin d’étoiles de signification par-dessus ? Superposez stat_compare_means() — voir la leçon Ajouter des p-values.
Obtenez le livre — R Graphics Essentials (PDF)

Introduction

Une boîte à moustaches est le cheval de bataille de la comparaison de groupes, et un graphique en violon en est la cousine sensible à la distribution. En R, le paquet ggpubr trace les deux en un seul appel — colorés par groupe, stylés pour la revue, prêts pour un panneau de figure — sans écrire à la main la grammaire en couches de ggplot2.

Deux fonctions suffisent :

  • ggboxplot() — une boîte à moustaches prête à publier. Colorez ou remplissez par groupe, ajoutez les points sous-jacents, mettez des encoches aux boîtes, ordonnez-les ou retournez-les.
  • ggviolin() — un graphique en violon prêt à publier. Mêmes arguments, plus une boîte à moustaches à l’intérieur et des lignes de quantiles, pour voir la forme complète de la distribution de chaque groupe.

Les deux appliquent automatiquement le theme_pubr() épuré de ggpubr, vous n’ajoutez donc pas de thème. Cette leçon parcourt tout le flux de travail canonique sur les données intégrées ToothGrowth — la longueur des dents len selon trois niveaux de dose et deux suppléments supp. Chaque figure est rendue ici même, et vous pouvez réexécuter ou modifier chacune d’elles en direct.

Vous voulez la grammaire sous-jacente — geom_boxplot() / geom_violin() couche par couche ? Voir les leçons ggplot2 boîte à moustaches et graphique en violon. ggpubr est le raccourci de publication par-dessus les mêmes geoms.

Boîte à moustaches colorée par groupe (le graphique canonique)

Voici l’image que la plupart des gens recherchent : une boîte à moustaches de la longueur des dents par dose, avec une couleur différente par dose et les observations brutes jitterées par-dessus. x/y sont des noms de colonnes sous forme de chaînes, color mappe le contour à dose, palette = "jco" applique un jeu de couleurs de revue, et add = "jitter" superpose les points. Tout le reste de la leçon est une variation de ce seul appel.

library(ggpubr)
df <- ToothGrowth
df$dose <- factor(df$dose)

ggboxplot(df, x = "dose", y = "len",
          color = "dose", palette = "jco",
          add = "jitter",
          xlab = "Dose (mg)", ylab = "Tooth length")

A ggpubr box plot of tooth length by dose, coloured by dose with the jco journal palette and jittered points drawn over each box.

Utilisez color pour teinter seulement le contour (comme ci-dessus) ou fill pour remplir la boîte. palette accepte les jeux de couleurs de revue nommés ("jco", "npg", "lancet", "aaas"), un nom Brewer, ou un vecteur de vos propres couleurs.

library(ggpubr)
df <- ToothGrowth
df$dose <- factor(df$dose)

ggboxplot(df, x = "dose", y = "len",
          fill = "dose", palette = "npg",
          xlab = "Dose (mg)", ylab = "Tooth length")

A ggpubr box plot of tooth length by dose with each box filled by the npg journal palette.

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

Une boîte à moustaches masque la taille d’échantillon et tout regroupement. add = "jitter" superpose les observations individuelles pour que le lecteur voie la dispersion réelle — fortement recommandé pour les petits échantillons typiques des expériences. Vous pouvez le combiner avec d’autres résumés ("mean_sd", "dotplot") et styliser les points (taille, couleur, transparence) via add.params.

library(ggpubr)
df <- ToothGrowth
df$dose <- factor(df$dose)

ggboxplot(df, x = "dose", y = "len",
          color = "dose", palette = "jco",
          add = "jitter",
          xlab = "Dose (mg)", ylab = "Tooth length")

A ggpubr box plot of tooth length by dose with jittered points overlaid so every observation is visible.

Boîtes avec encoches

Une encoche dessine une taille autour de la médiane ; si les encoches de deux boîtes ne se chevauchent pas, c’est une indication visuelle grossière que leurs médianes diffèrent. Activez-les avec notch = TRUE.

library(ggpubr)
df <- ToothGrowth
df$dose <- factor(df$dose)

ggboxplot(df, x = "dose", y = "len",
          color = "dose", palette = "jco",
          notch = TRUE,
          xlab = "Dose (mg)", ylab = "Tooth length")

A ggpubr box plot of tooth length by dose with notched boxes drawn around each median.

L’encoche est un guide visuel, pas un test formel. Pour une vraie p-value sur le graphique, superposez stat_compare_means() — voir Ajouter des p-values.

Ordonner les groupes

Par défaut, les groupes suivent l’ordre des niveaux du facteur. Donnez à order un vecteur explicite pour les arranger comme l’histoire se lit le mieux — ici, la dose la plus grande en premier.

library(ggpubr)
df <- ToothGrowth
df$dose <- factor(df$dose)

ggboxplot(df, x = "dose", y = "len",
          color = "dose", palette = "jco",
          order = c("2", "1", "0.5"),
          xlab = "Dose (mg)", ylab = "Tooth length")

A ggpubr box plot of tooth length with the dose groups reordered as 2, 1, 0.5 along the x-axis.

Boîtes à moustaches horizontales

Quand les étiquettes de catégories sont longues, une disposition horizontale se lit mieux. Retournez le graphique avec rotate = TRUE — ggpubr échange les axes pour vous.

library(ggpubr)
df <- ToothGrowth
df$dose <- factor(df$dose)

ggboxplot(df, x = "dose", y = "len",
          color = "dose", palette = "jco",
          add = "jitter", rotate = TRUE,
          xlab = "Dose (mg)", ylab = "Tooth length")

A horizontal ggpubr box plot of tooth length by dose, with the dose categories running down the y-axis.

Graphiques en violon : voir la forme de la distribution

Une boîte à moustaches résume cinq nombres ; un graphique en violon trace la densité complète, si bien que les groupes bimodaux ou asymétriques sont évidents. ggviolin() prend les mêmes arguments que ggboxplot() — remplissez par groupe et appliquez une palette.

library(ggpubr)
df <- ToothGrowth
df$dose <- factor(df$dose)

ggviolin(df, x = "dose", y = "len",
         fill = "dose", palette = "jco",
         xlab = "Dose (mg)", ylab = "Tooth length")

A ggpubr violin plot of tooth length by dose, each violin filled by the jco journal palette, showing the density shape of every group.

Ajouter une boîte à moustaches à l’intérieur du violon

Le violon montre la forme mais masque la médiane et les quartiles. Insérez une petite boîte à moustaches à l’intérieur de chaque violon avec add = "boxplot" — la vue qui réunit le meilleur des deux. add.params stylise la boîte intérieure (ici, un remplissage blanc pour qu’elle ressorte sur le violon coloré).

library(ggpubr)
df <- ToothGrowth
df$dose <- factor(df$dose)

ggviolin(df, x = "dose", y = "len",
         fill = "dose", palette = "jco",
         add = "boxplot", add.params = list(fill = "white"),
         xlab = "Dose (mg)", ylab = "Tooth length")

A ggpubr violin plot of tooth length by dose with a narrow white-filled box plot drawn inside each violin.

Tracer des lignes de quantiles et rogner les queues

Au lieu d’une boîte intérieure, vous pouvez marquer les quartiles directement sur le violon avec draw_quantiles = c(0.25, 0.5, 0.75). Par défaut, ggplot2 rogne chaque violon à l’étendue des données ; passez trim = FALSE pour laisser les queues de densité s’étendre au-delà du minimum et du maximum observés afin d’obtenir une silhouette plus lisse.

library(ggpubr)
df <- ToothGrowth
df$dose <- factor(df$dose)

ggviolin(df, x = "dose", y = "len",
         fill = "dose", palette = "jco",
         draw_quantiles = c(0.25, 0.5, 0.75),
         trim = FALSE,
         xlab = "Dose (mg)", ylab = "Tooth length")

A ggpubr violin plot of tooth length by dose with horizontal lines at the 25th, 50th and 75th percentiles and untrimmed density tails.

Ajouter des p-values par-dessus

C’est sur les boîtes à moustaches et les violons que se lit la signification entre groupes ; ggpubr vous permet donc d’annoter le test dans le même pipeline : ajoutez stat_compare_means() pour tracer des crochets par paires et une p-value globale directement sur le graphique.

library(ggpubr)
df <- ToothGrowth
df$dose <- factor(df$dose)
my_comparisons <- list(c("0.5", "1"), c("1", "2"), c("0.5", "2"))

ggviolin(df, x = "dose", y = "len",
         fill = "dose", palette = "jco",
         add = "boxplot", add.params = list(fill = "white")) +
  stat_compare_means(comparisons = my_comparisons, label = "p.signif") +  # pairwise stars
  stat_compare_means(label.y = 50)                                        # global p-value

A ggpubr violin plot of tooth length by dose with an inner box plot, three pairwise significance brackets and a global Kruskal-Wallis p-value annotated on top.

Ce n’est qu’un aperçu — choisir le bon test (Wilcoxon, t-test, ANOVA), les échantillons appariés, les groupes de référence et les symboles de signification personnalisés sont tout le sujet de la leçon dédiée Ajouter des p-values.

Essayez en direct

Les graphiques ci-dessus ont été rendus au moment de la construction. Vous voulez expérimenter ? Modifiez le code et appuyez sur Run — il s’exécute dans votre navigateur via webR (pas de serveur, pas d’installation). Essayez de remplacer ggboxplot par ggviolin, de changer la palette en "npg", d’ajouter notch = TRUE, ou de retourner avec rotate = TRUE.

Vous travaillez en Python ? Un guide seaborn des boîtes/violons arrive dans la série Python.

🟢 Avec un agent IA

Demandez à Prova « dois-je utiliser une boîte à moustaches ou un graphique en violon pour mes données — et comment ajouter la bonne p-value ? » — elle répond avec du code que vous pouvez exécuter sur votre propre data frame, ce qui rend le choix reproductible. The runtime is the judge. Ask Prova →

Problèmes courants

  • Les groupes de l’axe x sont dans le désordre ou sont des nombres, pas des catégories. x doit être un facteur. Exécutez df$dose <- factor(df$dose) d’abord ; ensuite order = c(...) les arrange.
  • La palette est ignorée. Une palette nommée comme "jco" ne colore que lorsque vous mappez aussi une variable à color ou fill (par ex. fill = "dose"). Sans attribut esthétique de groupement, il n’y a rien à colorer.
  • La boîte à moustaches intérieure est invisible dans le violon. Faites correspondre son remplissage à l’arrière-plan — passez add.params = list(fill = "white") pour que la boîte blanche ressorte sur le violon coloré.
  • Mon violon est tronqué à l’étendue des données. C’est le comportement par défaut (trim = TRUE). Mettez trim = FALSE pour la densité lissée complète.
  • J’ai ajouté un thème personnalisé et l’apparence a changé. ggpubr applique déjà theme_pubr() ; n’ajoutez un thème que si vous voulez délibérément remplacer le réglage de publication par défaut.

Questions fréquentes

Utilisez ggboxplot() : ggboxplot(ToothGrowth, x = "dose", y = "len") dessine une boîte à moustaches prête à publier en un seul appel — aucun réglage de theme() n’est nécessaire (elle applique theme_pubr() automatiquement). Associez une variable de groupe à fill ou color (par exemple fill = "dose") et ajoutez une palette nommée (palette = "jco") pour colorer les boîtes par groupe.

Une boîte à moustaches résume la distribution avec cinq nombres (médiane, quartiles, moustaches) — compacte, mais elle masque la forme. Un graphique en violon dessine la densité complète (en miroir), ce qui révèle une bimodalité ou une asymétrie qu’une boîte à moustaches cacherait. Ils sont complémentaires : ggviolin(..., add = "boxplot") superpose une petite boîte à moustaches dans chaque violon pour montrer à la fois le résumé et la forme.

Ajoutez des points dispersés avec l’argument add : ggboxplot(ToothGrowth, x = "dose", y = "len", add = "jitter"). Le jitter étale horizontalement les points qui se superposent, si bien que vous voyez la taille réelle de l’échantillon et les éventuelles valeurs aberrantes. Utilisez add = "dotplot" pour un diagramme en points de Wilkinson, et add.params = list(size = ..., color = ...) pour styliser les points.

L’encoche est un intervalle de confiance d’environ 95 % autour de la médiane. Comme test visuel rapide : si les encoches de deux groupes ne se chevauchent pas, leurs médianes diffèrent probablement de façon significative. Activez-la avec ggboxplot(..., notch = TRUE). Pour une vraie p-value, ajoutez stat_compare_means() plutôt que de vous fier à l’encoche seule.

C’est le comportement par défaut trim = TRUE, qui coupe la densité aux minimum et maximum observés. Indiquez trim = FALSE pour dessiner la densité lissée complète (elle s’étend un peu au-delà des données). Le rognage est plus honnête sur l’étendue des données ; la version non rognée paraît plus lisse — choisissez selon votre public.

Testez vos connaissances

Complétez le code pour que chaque groupe dose soit dessiné comme un violon rempli par dose avec la palette "jco", avec une boîte à moustaches blanche à l’intérieur de chaque violon.

# ggviolin() takes these arguments here:
#   fill = "dose", palette = "jco",
#   add = "boxplot", add.params = list(fill = "white")
library(ggpubr) df <- ToothGrowth df$dose <- factor(df$dose) ggviolin(df, x = "dose", y = "len", fill = "dose", palette = "jco", add = "boxplot", add.params = list(fill = "white"))
library(ggpubr)
df <- ToothGrowth
df$dose <- factor(df$dose)

ggviolin(df, x = "dose", y = "len",
         fill = "dose", palette = "jco",
         add = "boxplot", add.params = list(fill = "white"))

Conclusion

Vous avez construit des boîtes à moustaches et des graphiques en violon prêts à publier à la manière de ggpubr : ggboxplot() pour les boîtes — colorées ou remplies par groupe, avec points jitterés, encoches, groupes réordonnés et disposition horizontale — et ggviolin() pour les violons — avec une boîte à moustaches intérieure, des lignes de quantiles et des queues non rognées. Parce que ggpubr applique theme_pubr() automatiquement, chaque graphique est prêt pour la figure dès le premier appel, et une couche stat_compare_means() le transforme en figure de revue avec la p-value par-dessus.

Pour la grammaire sous-jacente, voir les leçons ggplot2 boîte à moustaches et graphique en violon. Pour annoter correctement la signification — quel test, échantillons appariés, groupes de référence, étoiles personnalisées — lisez ensuite la leçon Ajouter des p-values ; et pour choisir et interpréter les tests eux-mêmes, voir la prochaine série statistiques.

Leçons connexes

Vous préférez un livre ? R Graphics 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 ggpubr — 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 = {Boîtes à moustaches et violons en R (ggpubr)},
  date = {2026-06-22},
  url = {https://www.datanovia.com/learn/data-visualization/ggpubr/box-violin-plots},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Boîtes à moustaches et violons en R (ggpubr).” 2026. June 22. https://www.datanovia.com/learn/data-visualization/ggpubr/box-violin-plots.