Tracer des données groupées en R : boîte, violon, barres et points

Choisissez le bon graphique pour une variable continue répartie par groupes — ou pour des effectifs par catégories — et comparez les groupes

Une carte pratique pour tracer des données groupées en R. Choisissez entre une boîte à moustaches, un graphique en violon, un strip chart ou un dot plot pour une variable continue par groupes, utilisez des diagrammes en barres groupés et empilés pour les effectifs de catégories, et ajoutez des p-value de comparaison de groupes — chacun avec un exemple ggplot2 / ggpubr exécutable et un lien vers la leçon complète.

Date de publication

28 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Les « données groupées » recouvrent deux problèmes distincts. Une variable continue répartie par groupes → montrez sa distribution (boîte à moustaches, violon, strip, dot). Des effectifs de catégories → montrez les fréquences (barres groupées ou empilées).
  • Boîte à moustaches = le résumé en cinq nombres ; violon = la forme complète ; strip/dot = les points bruts (idéal quand chaque groupe est petit).
  • Faites d’abord de la variable de groupement un facteur, sinon ggplot trace un axe continu.
  • Montrez toujours les points pour les petits groupes (jitter) et marquez la moyenne — une boîte nue masque le peu d’observations qu’elle contient.
  • Ajoutez une comparaison de groupes directement sur le graphique avec ggpubr::stat_compare_means().

Quand vous avez une mesure et une catégorie — longueur des dents selon la dose, prix selon le magasin, score selon la méthode — la question est toujours la même : « en quoi la mesure diffère-t-elle d’un groupe à l’autre ? » Cette page est la carte : elle présente chaque graphique qui répond à cette question, quand y recourir, et renvoie vers la leçon complète pour chacun. Un seul jeu de données (ToothGrowth : la longueur len des dents selon la dose de vitamine C) parcourt les exemples continus pour que vous puissiez comparer les vues côte à côte.

library(ggplot2)
library(ggpubr)
tg <- ToothGrowth
tg$dose <- as.factor(tg$dose)

ggboxplot(
  tg, x = "dose", y = "len", fill = "dose",
  palette = "jco", add = "jitter",
  xlab = "Vitamin C dose (mg/day)", ylab = "Tooth length"
) +
  stat_summary(fun = mean, geom = "point", shape = 18, size = 3.5) +
  theme(legend.position = "none")

A grouped box plot of tooth length by vitamin C dose, three coloured boxes with jittered points and a black diamond marking each group mean.

La boîte montre la médiane et les quartiles ; les points sont les 10 cochons d’Inde de chaque dose ; le losange est la moyenne. Cette combinaison — résumé et données brutes — est le graphique de données groupées vers lequel vous devez vous tourner en premier.

Les deux types de données groupées

Avant de choisir un geom, nommez ce que vous tracez. C’est ce qui détermine tout le reste.

  • Une variable continue répartie par groupes — la catégorie de groupement va sur l’axe des x, la mesure sur l’axe des y, et vous comparez des distributions. Les boîtes à moustaches, violons, strip charts et dot plots répondent tous à cela.
  • Des effectifs par catégories — vous comptez combien d’enregistrements tombent dans chaque combinaison de deux variables catégorielles. Les diagrammes en barres groupés et empilés répondent à cela.

Le reste de la page traite les deux cas.

Une variable continue répartie par groupes

Mêmes données (len selon dose), quatre façons de les montrer. Chacune arbitre différemment entre le détail et la clarté.

Boîte à moustaches — le résumé

La boîte à moustaches est le choix par défaut : médiane, quartiles et valeurs aberrantes d’un coup d’œil, et elle reste lisible avec de nombreux groupes. Colorez par groupe et ajoutez les points dispersés pour que le lecteur voie la taille d’échantillon.

library(ggplot2)
library(ggpubr)
tg <- ToothGrowth
tg$dose <- as.factor(tg$dose)

ggboxplot(tg, x = "dose", y = "len", fill = "dose",
          palette = "jco", add = "jitter") +
  theme(legend.position = "none")

A box plot of tooth length by dose, three coloured boxes with the individual points jittered over each box.

Leçon complète → Boîtes à moustaches dans ggplot2 — encoches, valeurs aberrantes, plusieurs variables de groupement, ordre et facettes.

Graphique en violon — la forme

Un graphique en violon reflète une courbe de densité de chaque côté, vous voyez donc les données s’accumulent — une bimodalité qu’une boîte à moustaches masquerait. Associez-le à une fine boîte à moustaches pour conserver la médiane et les quartiles.

library(ggplot2)
library(ggpubr)
tg <- ToothGrowth
tg$dose <- as.factor(tg$dose)

ggviolin(tg, x = "dose", y = "len", fill = "dose",
         palette = "jco", add = "boxplot", add.params = list(fill = "white")) +
  theme(legend.position = "none")

A violin plot of tooth length by dose with a narrow box plot inside each violin showing the median and quartiles.

Leçon complète → Graphiques en violon dans ggplot2 — rognage, statistiques résumées, et combinaison avec des boîtes à moustaches.

Strip chart et dot plot — les points bruts

Quand chaque groupe est petit, dessinez chaque observation. Un strip chart disperse les points ; un dot plot les empile par valeur. Tous deux rendent la taille d’échantillon honnête, là où une boîte à moustaches ne le peut pas.

library(ggplot2)
library(ggpubr)
tg <- ToothGrowth
tg$dose <- as.factor(tg$dose)

ggstripchart(tg, x = "dose", y = "len", color = "dose",
             palette = "jco", add = "mean_sd") +
  theme(legend.position = "none")

A strip chart of tooth length by dose with jittered points and a horizontal line marking each group mean.

Leçons complètes → Strip charts et Dot plots — empilement, regroupement en classes, et ajout de statistiques résumées. Pour un hybride du strip chart et du violon tenant compte de la densité, le sinaplot (ggforce::geom_sina) répartit les points selon leur densité locale — utile quand un strip chart se chevauche et qu’un violon masque les données brutes.

Effectifs par groupes

Quand la mesure est un effectif — combien d’enregistrements tombent dans chaque catégorie par groupe — utilisez un diagramme en barres. Construisez la table de fréquences avec R de base, puis tracez-la. Ici : le nombre de voitures selon le nombre de cylindres, réparti par nombre de vitesses.

library(ggplot2)
library(ggpubr)
counts <- as.data.frame(table(cyl = mtcars$cyl, gears = factor(mtcars$gear)))

ggbarplot(counts, x = "cyl", y = "Freq", fill = "gears",
          palette = "jco", position = position_dodge(0.8),
          xlab = "Cylinders", ylab = "Number of cars")

A grouped bar plot of car counts by cylinder, with bars dodged side by side and coloured by number of gears.

Remplacez position = position_dodge() par position_stack() pour des barres empilées, ou ajoutez label = TRUE pour afficher les effectifs sur les barres.

Pour une alternative compacte aux barres, un graphique de points de Cleveland ou lollipop (ggpubr::ggdotchart()) trace les mêmes effectifs sous forme de points sur un segment — plus facile à lire avec de nombreuses catégories.

Leçons complètes → Diagrammes en barres dans ggplot2 (empilées ou juxtaposées, étiquettes d’effectifs) et Diagrammes en barres et lollipop ggpubr (le graphique de points ggdotchart et les barres ordonnées).

Ajouter la comparaison de groupes

Un graphique groupé appelle la question évidente — les groupes sont-ils réellement différents ? Ajoutez le test directement sur le graphique avec ggpubr. stat_compare_means() exécute la comparaison (ici un Kruskal-Wallis global, plus des tests par paires) et affiche les p-value là où le lecteur regarde déjà.

library(ggplot2)
library(ggpubr)
tg <- ToothGrowth
tg$dose <- as.factor(tg$dose)

my_comparisons <- list(c("0.5", "1"), c("1", "2"), c("0.5", "2"))
ggboxplot(tg, x = "dose", y = "len", fill = "dose",
          palette = "jco", add = "jitter") +
  stat_compare_means(comparisons = my_comparisons) +
  stat_compare_means(label.y = 45) +
  theme(legend.position = "none")

A grouped box plot of tooth length by dose with pairwise p-value brackets between the doses and a global Kruskal-Wallis p-value above.

Pour des moyennes avec barres d’erreur au lieu de boîtes, voyez graphiques de moyenne ± barre d’erreur ; pour des p-value de t-test / ANOVA mises en forme pour publication, voyez ajouter des p-value à partir de tests.

Quel graphique choisir ?

Vous avez… Vous voulez montrer… Utilisez
Une variable continue par groupe Le résumé (médiane, dispersion, valeurs aberrantes) Boîte à moustaches
Une variable continue par groupe La forme complète de la distribution Graphique en violon
Une variable continue, petits groupes Chaque observation Strip / dot plot
Deux variables catégorielles Les effectifs par combinaison Barres groupées / empilées
N’importe lequel ci-dessus Si les groupes diffèrent Ajoutez stat_compare_means()

Le choix par défaut honnête pour une variable continue répartie sur une poignée de groupes est une boîte à moustaches avec les points dispersés par-dessus — résumé et données brutes en une seule figure.

Essayez en direct

Changez le geom, la variable de groupement (dosesupp) ou la palette, puis réexécutez.

🟢 Avec un agent IA

Pas sûr du graphique adapté à vos données ? Demandez à Prova — décrivez vos variables (continues ou effectifs, combien de groupes, combien d’observations) et elle suggère le graphique et écrit le code ggpubr exécutable. The runtime is the judge. Demander à Prova →

Problèmes fréquents

L’axe des x est continu, et non une boîte par groupe. Votre variable de groupement est encore numérique. Convertissez-la d’abord en facteur — tg$dose <- as.factor(tg$dose) — puis ggplot trace une boîte par niveau.

La boîte à moustaches paraît correcte mais les groupes sont minuscules. Une boîte à moustaches de cinq points suggère plus qu’elle ne le devrait. Ajoutez add = "jitter" (ou passez à un strip/dot plot) pour que le lecteur voie le peu d’observations derrière chaque boîte.

Les barres sortent avec la mauvaise forme ou empilées alors que vous les vouliez côte à côte. geom_bar() compte les lignes par défaut ; avec une table de fréquences pré-calculée, utilisez stat = "identity", et définissez position = position_dodge() pour des barres groupées ou position_stack() pour des barres empilées.

Questions fréquentes

Mettez la catégorie sur l’axe des x et la mesure sur l’axe des y, après avoir transformé la catégorie en facteur. Une boîte à moustaches est le choix habituel : ggpubr::ggboxplot(data, x = "group", y = "value", add = "jitter"). Utilisez un graphique en violon pour la forme de la distribution, ou un strip/dot plot quand chaque groupe a peu de points.

Une boîte à moustaches montre le résumé en cinq nombres (médiane, quartiles, valeurs aberrantes) et reste lisible avec de nombreux groupes. Un graphique en violon montre la forme complète de la distribution, révélant ainsi une bimodalité ou une asymétrie qu’une boîte à moustaches masque — au prix d’un besoin de plus de points par groupe pour être fiable. Combinez-les : un violon avec une fine boîte à moustaches à l’intérieur.

Les deux montrent les effectifs d’une catégorie répartis selon une seconde. Les barres groupées (juxtaposées) se placent côte à côte — idéales pour comparer des valeurs à l’intérieur de chaque position x. Les barres empilées se placent les unes sur les autres — idéales pour montrer le total et ses composantes. Basculez avec position = position_dodge() ou position_stack().

Ajoutez ggpubr::stat_compare_means() au graphique. Avec une liste comparisons, il dessine des crochets par paires et les p-value ; seul, il affiche un test global (Kruskal-Wallis pour 3 groupes ou plus, Wilcoxon pour 2). Pour des p-value paramétriques de t-test / ANOVA mises en forme pour un article, voyez la leçon ajouter des p-value à partir de tests.

Ajoutez des points dispersés avec add = "jitter" dans n’importe quel graphique ggpubr, ou utilisez un strip chart (ggstripchart()) ou un dot plot (ggdotplot()) dont c’est tout le rôle de montrer les points bruts. Faites-le toujours pour les petits groupes — cela rend la taille d’échantillon honnête.

Testez vos connaissances

Vous mesurez un score continu sur trois méthodes, avec environ 8 observations par méthode, et vous voulez que le lecteur voie chaque point et si les méthodes diffèrent.

  1. Quel type de graphique convient — boîte à moustaches, violon ou strip/dot ? Pourquoi ?
  2. Complétez le code pour le tracer sur ToothGrowth (len selon dose) et ajoutez les p-value de comparaison de groupes.

Avec environ 8 points par groupe, montrez chaque point : un strip chart (ggstripchart) ou un dot plot. Le blanc correspond au nom de la fonction.

ggstripchart(tg, x = "dose", y = "len", color = "dose",
             palette = "jco", add = "mean_sd") +
  stat_compare_means()

Un strip chart dessine les 10 points de chaque dose, add = "mean_sd" superpose la moyenne ± écart-type, et stat_compare_means() affiche la p-value globale de Kruskal-Wallis. Avec de petits groupes, c’est plus honnête qu’une boîte à moustaches.

Vérification rapide : votre variable de groupement est stockée sous forme de nombres (0.5, 1, 2) et ggplot trace un seul axe des x continu au lieu d’une boîte par groupe. Quelle est la correction ?

Convertissez-la en facteur avant de tracer : data$group <- as.factor(data$group). ggplot traite un x numérique comme continu ; un facteur donne une position discrète (et une boîte) par niveau.

Conclusion

Tracer des données groupées se résume à une décision : une variable continue répartie par groupes (boîte, violon, strip, dot — montrez la distribution et les points) ou des effectifs par catégories (barres groupées ou empilées). Faites du groupe un facteur, montrez les points bruts pour les petits échantillons, et laissez stat_compare_means() répondre si les groupes diffèrent réellement. Servez-vous de cette page pour choisir ; suivez le lien vers chaque leçon complète pour approfondir.

Leçons connexes

Cette page vous a-t-elle été utile ?

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

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Tracer des données groupées en R : boîte, violon, barres et
    points},
  date = {2026-06-28},
  url = {https://www.datanovia.com/learn/data-visualization/grouped-data},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Tracer des données groupées en R : boîte, violon, barres et points.” 2026. June 28. https://www.datanovia.com/learn/data-visualization/grouped-data.