library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
geom_jitter(color = "#3a86d4") +
labs(x = "Dose (mg/day)", y = "Tooth length") +
theme_minimal()
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.
20 juin 2026
8 juillet 2026
x et les valeurs à y, puis vous tracez avec geom_jitter().position_jitter(width = ...) — resserrez le jitter pour que les points restent rattachés à leur groupe.stat_summary() : fun = mean/median pour un point, fun.data = "mean_sdl" pour la moyenne +/- écart-type.geom_boxplot() ou un geom_violin() pour combiner la forme du résumé avec les points bruts.scale_colour_viridis_d()) ; utilisez position_jitterdodge() pour séparer les groupes proprement.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).
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.
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.
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.
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()
Remplacez fun = mean par fun = median pour marquer la médiane à la place.
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()
Vous préférez un rendu horizontal en barre à embouts ? Remplacez geom = "pointrange" par geom = "crossbar" (ajoutez width = 0.4 pour le dimensionner).
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.

Pour la leçon complète sur la boîte à moustaches, consultez le guide de la boîte à moustaches ggplot2.
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.

Pour la leçon complète sur le violon, consultez le guide du graphique en violon ggplot2.
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.
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.
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.

Pour le tableau complet des codes de forme, consultez le guide des formes de points ggplot2.
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.
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 →
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.
Complétez le code pour que le stripchart affiche aussi un losange rouge à la moyenne de chaque dose.
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")
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.
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 = {Stripchart en R : guide ggplot2},
date = {2026-06-20},
url = {https://www.datanovia.com/learn/data-visualization/ggplot2/stripchart},
langid = {fr}
}