Stripchart en R : guide ggplot2

Tracez un nuage de points unidimensionnel (jitter) et personnalisez-le — en direct dans votre navigateur

Apprenez à construire un stripchart en R avec ggplot2 — tracez-le avec geom_jitter(), maîtrisez le jitter, ajoutez la moyenne/médiane et la moyenne +/- écart-type avec stat_summary(), superposez boîtes à moustaches et violons, et colorez par groupe. Modifiez et exécutez le code en direct, sans installation.

Date de publication

20 juin 2026

Modifié

8 juillet 2026

AstucePoints clés
  • Un stripchart (nuage de points unidimensionnel / graphique de points avec jitter) montre chaque point individuel par groupe — idéal pour les petits échantillons, là où une boîte à moustaches masque les données.
  • Dans ggplot2, vous associez un groupe à x et les valeurs à y, puis vous tracez avec geom_jitter().
  • Maîtrisez le chevauchement avec position_jitter(width = ...) — resserrez le jitter pour que les points restent rattachés à leur groupe.
  • Ajoutez une ligne centrale avec stat_summary() : fun = mean/median pour un point, fun.data = "mean_sdl" pour la moyenne +/- écart-type.
  • Superposez un geom_boxplot() ou un geom_violin() pour combiner la forme du résumé avec les points bruts.
  • Colorez les points par groupe avec une palette adaptée au daltonisme (scale_colour_viridis_d()) ; utilisez position_jitterdodge() pour séparer les groupes proprement.
  • 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 stripchart — aussi appelé nuage de points unidimensionnel ou graphique de points avec jitter — trace les observations brutes d’une variable numérique en fonction d’un groupe catégoriel. Contrairement à une boîte à moustaches, qui résume une distribution en cinq nombres, un stripchart montre chaque point : c’est donc le bon outil lorsque chaque groupe ne compte qu’une poignée d’observations et qu’une boîte induirait en erreur. En R, ggplot2 en trace un avec une seule couche — geom_jitter() — qui étale latéralement les points qui se chevauchent pour que vous puissiez tous les voir. 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 un stripchart de base avec geom_jitter()

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

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

ggplot2 stripchart of tooth length (len) by vitamin C dose; each dose is a column of jittered points that climbs with dose.

Maîtriser la quantité de jitter

Par défaut, geom_jitter() étale les points assez largement, ce qui peut brouiller leur appartenance à un groupe. Passez position = position_jitter(width = ...) (ou le raccourci width) pour resserrer l’étalement horizontal. Définissez height = 0 pour que les valeurs de l’axe des y ne soient jamais déformées.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_jitter(position = position_jitter(width = 0.2, height = 0), color = "#3a86d4") +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 stripchart of tooth length by dose with the jitter narrowed to width 0.2 so each column of points stays tight to its dose.

Changer la taille et la forme des points

Rendez les points plus lisibles en définissant une size plus grande, une shape creuse ou pleine, et un peu d’ alpha pour que les points qui se chevauchent paraissent plus denses. Ce sont des valeurs fixes (hors de aes()), elles s’appliquent donc à chaque point.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_jitter(position = position_jitter(width = 0.2, height = 0),
              color = "#3a86d4", size = 3, shape = 16, alpha = 0.6) +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 stripchart of tooth length by dose drawn with larger, semi-transparent filled circles.

Ajouter un point de moyenne ou de médiane

Les points seuls ne montrent pas le centre de chaque groupe. Superposez stat_summary() pour marquer la moyenne (ou la médiane) de chaque dose — utile pour lire d’un coup d’œil la tendance entre les groupes.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_jitter(position = position_jitter(width = 0.2, height = 0),
              color = "#3a86d4", alpha = 0.5) +
  stat_summary(fun = mean, geom = "point", shape = 23, size = 4, fill = "red") +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 stripchart of tooth length by dose with a large red diamond marking the mean of each group.

Remplacez fun = mean par fun = median pour marquer la médiane à la place.

Ajouter la moyenne +/- écart-type

Pour résumer à la fois le centre et la dispersion, tracez la moyenne avec des barres d’erreur à +/- un écart- type. stat_summary() avec fun.data = "mean_sdl" calcule la moyenne +/- un multiple de l’écart-type ; définissez fun.args = list(mult = 1) pour exactement un écart-type. Rendez-la sous forme de pointrange (un point avec une ligne) ou de crossbar.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_jitter(position = position_jitter(width = 0.2, height = 0),
              color = "#3a86d4", alpha = 0.5) +
  stat_summary(fun.data = "mean_sdl", fun.args = list(mult = 1),
               geom = "pointrange", color = "black", linewidth = 0.8) +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 stripchart of tooth length by dose with a black point-range showing the mean plus or minus one standard deviation per group.

Vous préférez un rendu horizontal en barre à embouts ? Remplacez geom = "pointrange" par geom = "crossbar" (ajoutez width = 0.4 pour le dimensionner).

Combiner un stripchart avec une boîte à moustaches

Une boîte à moustaches donne la médiane et les quartiles ; les points avec jitter montrent combien d’observations se cachent derrière. Superposez-les : tracez d’abord geom_boxplot() (avec outlier.shape = NA pour que les valeurs aberrantes ne soient pas tracées deux fois), puis geom_jitter() par-dessus.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_boxplot(outlier.shape = NA) +
  geom_jitter(position = position_jitter(width = 0.2, height = 0),
              color = "#3a86d4", alpha = 0.6) +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

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

Pour la leçon complète sur la boîte à moustaches, consultez le guide de la boîte à moustaches ggplot2.

Combiner un stripchart avec un graphique en violon

Un graphique en violon montre la forme complète de la distribution ; les points avec jitter l’ancrent aux données réelles. Tracez d’abord geom_violin(), puis geom_jitter() par-dessus.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_violin(trim = FALSE, fill = "grey90", color = "grey60") +
  geom_jitter(position = position_jitter(width = 0.2, height = 0),
              color = "#3a86d4", alpha = 0.6) +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

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

Pour la leçon complète sur le violon, consultez le guide du graphique en violon ggplot2.

Couleur unique ou coloration des points par groupe

Jusqu’ici, chaque point utilise la couleur unique de la marque. Pour colorer les points selon leur groupe, associez la variable de regroupement à colour à l’intérieur de aes() et utilisez une échelle viridis adaptée au daltonisme pour que la figure reste lisible par tous, en couleur comme à l’impression.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, colour = factor(dose))) +
  geom_jitter(position = position_jitter(width = 0.2, height = 0)) +
  scale_colour_viridis_d() +
  labs(x = "Dose (mg/day)", y = "Tooth length", colour = "Dose") +
  theme_minimal()

ggplot2 stripchart of tooth length by dose, each dose's points coloured with a distinct colourblind-safe viridis colour.

Stripchart avec plusieurs groupes

Pour comparer une seconde variable (ici supp, le mode d’administration) au sein de chaque dose, associez-la à colour et décalez les points avec position_jitterdodge(). Cela déplace les points de chaque groupe vers leur propre emplacement pour que les deux nuages ne se chevauchent pas.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, colour = supp)) +
  geom_jitter(position = position_jitterdodge(jitter.width = 0.2, dodge.width = 0.8)) +
  scale_colour_viridis_d() +
  labs(x = "Dose (mg/day)", y = "Tooth length", colour = "Supplement") +
  theme_minimal()

ggplot2 grouped stripchart of tooth length by dose, with orange-juice and ascorbic-acid points dodged into separate colourblind-safe colours at each dose.

Associer la forme des points au groupe

Lorsqu’une figure peut être imprimée en niveaux de gris, encodez le groupe par la forme en plus de (ou à la place de) la couleur. Associez la variable de regroupement à shape à l’intérieur de aes() ; ggplot2 attribue un symbole distinct par groupe.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, shape = supp)) +
  geom_jitter(position = position_jitterdodge(jitter.width = 0.2, dodge.width = 0.8),
              colour = "#3a86d4") +
  labs(x = "Dose (mg/day)", y = "Tooth length", shape = "Supplement") +
  theme_minimal()

ggplot2 grouped stripchart of tooth length by dose with the two supplement groups drawn as different point shapes.

Pour le tableau complet des codes de forme, consultez le guide des formes de points ggplot2.

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 stripplot matplotlib / seaborn arrive dans la série Python.

🟢 Avec un agent IA

Demandez à Prova « mes groupes sont minuscules — un stripchart ou une boîte à moustaches est-il le choix honnête ici ? » — elle répond avec du code que vous pouvez exécuter, pour que l’explication soit reproductible. The runtime is the judge. Ask Prova →

Questions fréquentes

Un stripchart (tracé avec geom_jitter()) place chaque observation individuelle sous forme de point, tandis qu’une boîte à moustaches (geom_boxplot()) résume chaque groupe en cinq nombres (médiane et quartiles). Utilisez un stripchart lorsque les groupes sont petits, pour qu’une boîte ne masque ni n’induise en erreur, ou superposez les deux — geom_boxplot(outlier.shape = NA) puis geom_jitter() — pour obtenir à la fois le résumé et les données brutes.

Passez position = position_jitter(width = 0.2, height = 0) à geom_jitter() — une petite width garde chaque colonne resserrée sur son groupe, et height = 0 empêche les valeurs en y d’être déformées. Réduisez encore la width (par exemple 0.1) si les colonnes débordent toujours les unes sur les autres.

Ajoutez une couche stat_summary() : stat_summary(fun = mean, geom = "point", shape = 23, size = 4, fill = "red") marque la moyenne de chaque groupe. Remplacez fun = mean par fun = median pour marquer la médiane à la place.

Utilisez stat_summary() avec fun.data = "mean_sdl" et fun.args = list(mult = 1) pour exactement un écart-type, tracé sous forme de geom = "pointrange". Passez à geom = "crossbar" (ajoutez width = 0.4) si vous préférez un rendu en barre à embouts plutôt qu’un point avec une ligne.

Associez la seconde variable à colour à l’intérieur de aes() et décalez les points avec position = position_jitterdodge(jitter.width = 0.2, dodge.width = 0.8). Cela déplace chaque groupe vers son propre emplacement à chaque position en x pour que les deux nuages de points ne se chevauchent pas ; combinez-le avec scale_colour_viridis_d() pour des couleurs adaptées au daltonisme.

Testez vos connaissances

Complétez le code pour que le stripchart affiche aussi un losange rouge à la moyenne de chaque dose.

# Use stat_summary() with fun = mean and geom = "point"
# (try shape = 23, size = 4, fill = "red")
library(ggplot2) ggplot(ToothGrowth, aes(x = factor(dose), y = len)) + geom_jitter(position = position_jitter(width = 0.2, height = 0), alpha = 0.5) + stat_summary(fun = mean, geom = "point", shape = 23, size = 4, fill = "red")
library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_jitter(position = position_jitter(width = 0.2, height = 0), alpha = 0.5) +
  stat_summary(fun = mean, geom = "point", shape = 23, size = 4, fill = "red")

Conclusion

Vous avez construit un stripchart ggplot2 avec geom_jitter(), maîtrisé la largeur du jitter, ajusté la taille et la forme des points, ajouté des résumés moyenne / médiane et moyenne +/- écart-type avec stat_summary(), superposé boîtes à moustaches et violons, coloré les points par groupe avec une palette adaptée au daltonisme, séparé plusieurs groupes avec position_jitterdodge(), et encodé un groupe par la forme. Ensuite, explorez la boîte à moustaches et le graphique en violon pour les résumés de distribution, et le reste de la grammaire de 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 = {Stripchart en R : guide ggplot2},
  date = {2026-06-20},
  url = {https://www.datanovia.com/learn/data-visualization/ggplot2/stripchart},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Stripchart en R : guide ggplot2.” 2026. June 20. https://www.datanovia.com/learn/data-visualization/ggplot2/stripchart.