Dot plot dans R : un guide ggplot2

Dessinez, résumez et groupez un dot plot ggplot2 — en direct dans votre navigateur

Apprenez à construire un dot plot dans R avec ggplot2 — dessinez-le avec geom_dotplot(), ajoutez des résumés de moyenne et de médiane, combinez-le avec des boîtes à moustaches et des graphiques en violon, et comparez des groupes. Modifiez et exécutez le code en direct, sans rien installer.

Date de publication

20 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Un dot plot empile un point par observation, de sorte que vous voyez les données brutes et la forme de leur distribution dans une seule colonne compacte.
  • Dans ggplot2, vous mappez un groupe sur x et les valeurs sur y, puis vous dessinez avec geom_dotplot(binaxis = "y", stackdir = "center").
  • Ajustez les points avec dotsize (rayon) et stackratio (espacement entre les points empilés).
  • Ajoutez une mesure de centre — moyenne ou médiane — avec stat_summary(), et montrez la dispersion avec mean_sdl sous forme de barre transversale ou d’intervalle de points.
  • Superposez les points à une boîte à moustaches ou à un graphique en violon pour combiner les points bruts avec un résumé de distribution.
  • Colorez selon une variable de groupement avec une palette adaptée au daltonisme (scale_fill_viridis_d()) ; ajoutez une seconde variable avec position_dodge() pour comparer les groupes côte à côte.
  • Chaque graphique ci-dessous est rendu pour vous — puis modifiez n’importe quel exemple en direct dans le bac à sable.
Obtenez le livre — GGPlot2 Essentials (PDF)

Introduction

Un dot plot est la façon la plus honnête de montrer une petite distribution : au lieu de résumer les données en une boîte, il dessine un point par observation et les empile, de sorte que le lecteur voit chaque valeur et la forme qu’elles dessinent. Dans R, ggplot2 en dessine un avec une seule couche — geom_dotplot() — et facilite l’ajout de statistiques résumées et la combinaison avec des boîtes à moustaches ou des graphiques en violon. 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) via deux méthodes d’administration (supp : jus d’orange OJ ou acide ascorbique VC).

Construire un dot plot de base

Mappez dose sur l’axe des x et len sur l’axe des y. Définissez binaxis = "y" pour que les points soient regroupés le long de l’axe des valeurs, et stackdir = "center" pour que les points de chaque groupe s’empilent symétriquement en une colonne. Comme dose est stockée sous forme de nombre, enveloppez-la dans factor() pour que ggplot2 dessine une colonne par groupe.

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

ggplot2 dot plot of tooth length (len) by vitamin C dose; each dose is a centred column of stacked dots that climbs with dose.

Contrôler l’apparence des points : dotsize et stackratio

Deux arguments ajustent l’allure des points. dotsize met à l’échelle le rayon du point (relativement à la largeur de la classe), et stackratio définit l’espacement vertical entre les points empilés — des valeurs inférieures à 1 les resserrent, supérieures à 1 les écartent.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_dotplot(
    binaxis = "y", stackdir = "center",
    dotsize = 0.8, stackratio = 0.9,
    fill = "#3a86d4"
  ) +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 dot plot of tooth length by dose with larger, tightly packed dots set via dotsize and stackratio.

Ajouter des points de moyenne ou de médiane

Les points montrent les données brutes ; ajoutez un marqueur pour le centre. Superposez stat_summary() avec fun = mean (ou fun = median) pour déposer un seul point sur chaque colonne — utile lorsque vous voulez la valeur typique d’un coup d’œil.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_dotplot(binaxis = "y", stackdir = "center", fill = "#3a86d4", alpha = 0.7) +
  stat_summary(fun = mean, geom = "point", shape = 18, size = 5, colour = "red") +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 dot plot of tooth length by dose with a red point marking the mean of each group.

Ajouter la moyenne ± écart-type sous forme de barre transversale ou d’intervalle de points

Pour montrer la dispersion en plus du centre, résumez chaque groupe par la moyenne ± écart-type. stat_summary() avec fun.data = mean_sdl (et fun.args = list(mult = 1) pour ±1 écart-type) renvoie la moyenne et ses bornes ; dessinez-les sous forme de crossbar ou de pointrange.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_dotplot(binaxis = "y", stackdir = "center", fill = "#3a86d4", alpha = 0.6) +
  stat_summary(
    fun.data = mean_sdl, fun.args = list(mult = 1),
    geom = "crossbar", width = 0.5, colour = "grey30"
  ) +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 dot plot of tooth length by dose with a crossbar showing the mean plus or minus one standard deviation for each group.

Combiner avec une boîte à moustaches

Un dot plot s’associe naturellement à une boîte à moustaches : la boîte donne la médiane et les quartiles, les points montrent chaque observation derrière elle. Dessinez d’abord la boîte (avec outlier.shape = NA pour que les points ne soient pas dessinés deux fois), puis empilez les points par-dessus. Ajoutez notch = TRUE pour un test visuel approximatif permettant de voir si les médianes diffèrent — voir la leçon sur la boîte à moustaches pour en savoir plus.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_boxplot(notch = TRUE, outlier.shape = NA, fill = "white") +
  geom_dotplot(binaxis = "y", stackdir = "center", dotsize = 0.7, fill = "#3a86d4") +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 notched box plot of tooth length by dose with the individual observations stacked as dots on top of each box.

Combiner avec un graphique en violon

Remplacez la boîte par un violon pour montrer la forme complète de la densité derrière les points. Dessinez d’abord geom_violin(), puis les points par-dessus — les points prouvent combien d’observations se trouvent à l’intérieur de chaque courbe. Voir la leçon sur le graphique en violon pour les détails sur la densité.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_violin(trim = FALSE, fill = "grey90", colour = "grey60") +
  geom_dotplot(binaxis = "y", stackdir = "center", dotsize = 0.7, fill = "#3a86d4") +
  labs(x = "Dose (mg/day)", y = "Tooth length") +
  theme_minimal()

ggplot2 violin plot of tooth length by dose with individual observations stacked as dots inside each violin.

Colorer selon une variable de groupement

Pour colorer chaque colonne selon son groupe, mappez la variable de groupement sur fill. Utilisez une palette adaptée au daltonisme comme viridis afin que la figure reste lisible pour tout le monde, en couleur ou à l’impression.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = factor(dose))) +
  geom_dotplot(binaxis = "y", stackdir = "center") +
  scale_fill_viridis_d() +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Dose") +
  theme_minimal()

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

Comparer plusieurs groupes côte à côte

Mappez une seconde variable sur fill et décalez les colonnes pour comparer les groupes au sein de chaque dose. Définissez stackgroups = TRUE et passez position = position_dodge() pour que chaque supplément obtienne sa propre colonne, placée côte à côte.

library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len, fill = supp)) +
  geom_dotplot(
    binaxis = "y", stackdir = "center",
    stackgroups = TRUE, position = position_dodge(0.8),
    dotsize = 0.7
  ) +
  scale_fill_viridis_d() +
  labs(x = "Dose (mg/day)", y = "Tooth length", fill = "Supplement") +
  theme_minimal()

ggplot2 grouped dot plot of tooth length by dose, with orange-juice and ascorbic-acid columns of dots 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 de dot plot matplotlib/seaborn arrive dans la série Python.

🟢 Avec un agent IA

Demandez à Prova « un dot plot ou une boîte à moustaches est-il le meilleur choix pour ces données ToothGrowth ? » — elle répond avec du code que vous pouvez exécuter, de sorte que l’explication est reproductible. The runtime is the judge. Ask Prova →

Questions fréquentes

Mappez votre groupe sur x et vos valeurs sur y, puis ajoutez geom_dotplot(binaxis = "y", stackdir = "center"). Définir binaxis = "y" regroupe les points le long de l’axe des valeurs et stackdir = "center" empile les points de chaque groupe en une colonne symétrique.

Ajustez les deux arguments d’apparence : dotsize met à l’échelle le rayon du point relativement à la largeur de la classe (utilisez une valeur inférieure à 1 pour les réduire), et stackratio définit l’espacement vertical entre les points empilés (en dessous de 1 les resserre, au-dessus de 1 les écarte).

Superposez stat_summary(fun = mean, geom = "point") par-dessus geom_dotplot() pour déposer un point sur chaque colonne ; remplacez par fun = median pour la médiane. Pour montrer aussi la dispersion, utilisez fun.data = mean_sdl avec fun.args = list(mult = 1) et geom = "crossbar" (ou "pointrange") pour la moyenne ± 1 écart-type.

Dessinez d’abord la couche de résumé, puis empilez les points par-dessus. Pour une boîte à moustaches, utilisez geom_boxplot(outlier.shape = NA) (afin que les points ne soient pas dessinés deux fois) suivi de geom_dotplot() ; pour un violon, utilisez geom_violin() puis geom_dotplot().

Mappez une seconde variable sur fill, puis dans geom_dotplot() définissez stackgroups = TRUE et position = position_dodge() pour que chaque groupe obtienne sa propre colonne placée côte à côte. Associez-y scale_fill_viridis_d() pour un remplissage adapté au daltonisme.

Testez vos connaissances

Complétez le code pour que chaque colonne de points affiche aussi la moyenne de son groupe sous la forme d’un point unique.

# Use stat_summary() with fun = mean and geom = "point"
library(ggplot2) ggplot(ToothGrowth, aes(x = factor(dose), y = len)) + geom_dotplot(binaxis = "y", stackdir = "center", fill = "#3a86d4", alpha = 0.7) + stat_summary(fun = mean, geom = "point", shape = 18, size = 5, colour = "red")
library(ggplot2)
ggplot(ToothGrowth, aes(x = factor(dose), y = len)) +
  geom_dotplot(binaxis = "y", stackdir = "center", fill = "#3a86d4", alpha = 0.7) +
  stat_summary(fun = mean, geom = "point", shape = 18, size = 5, colour = "red")

Conclusion

Vous avez construit un dot plot ggplot2, ajusté les points avec dotsize et stackratio, ajouté des résumés de moyenne et de moyenne ± écart-type, combiné les points avec des boîtes à moustaches et des graphiques en violon, coloré les colonnes par groupe avec une palette adaptée au daltonisme, et comparé les groupes côte à côte avec position_dodge(). Ensuite, explorez la boîte à moustaches et le graphique en violon pour des résumés de distribution compacts, et 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 = {Dot plot dans R : un guide ggplot2},
  date = {2026-06-20},
  url = {https://www.datanovia.com/learn/data-visualization/ggplot2/dot-plot},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Dot plot dans R : un guide ggplot2.” 2026. June 20. https://www.datanovia.com/learn/data-visualization/ggplot2/dot-plot.