Diagramme en barres avec R : guide ggplot2

Tracer, étiqueter et grouper un diagramme en barres ggplot2 — en direct dans votre navigateur

Apprenez à construire un diagramme en barres avec R et ggplot2 — barres d’effectifs avec geom_bar() ou de valeurs avec geom_col(), ajout d’étiquettes de valeurs, passage à l’horizontale, couleur par groupe, et comparaison de groupes en barres groupées ou empilées. Modifiez et exécutez le code en direct, sans aucune installation.

Date de publication

20 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Un diagramme en barres compare une valeur entre plusieurs catégories à l’aide de barres rectangulaires.
  • Deux couches, deux rôles : geom_bar() compte les lignes par catégorie ; geom_col() trace des barres aux valeurs que vous fournissez.
  • Ajoutez des étiquettes de valeurs avec geom_text(), et passez à des barres horizontales avec coord_flip().
  • Comparez les groupes avec une seconde variable associée à fillgroupées (position = "dodge") ou empilées (le comportement par défaut).
  • Colorez les barres avec une palette scale_fill_viridis_d() adaptée au daltonisme.
  • Chaque graphique ci-dessous est rendu pour vous — modifiez ensuite n’importe quel exemple en direct dans le bac à sable.
Obtenez le livre — GGPlot2 Essentials (PDF)

Introduction

Un diagramme en barres compare une valeur entre plusieurs catégories — l’outil de prédilection pour les effectifs, les totaux et les moyennes de groupe. En R, ggplot2 vous offre deux couches de barres, et choisir la bonne est tout l’enjeu :

  • geom_bar() compte pour vous les lignes de chaque catégorie (il utilise stat = "count").
  • geom_col() trace une barre à la valeur que vous lui donnez (il utilise stat = "identity") — utilisez-le lorsque vous disposez déjà des nombres, comme des moyennes de groupe.

Cette leçon couvre les deux, ainsi que les étiquettes, les couleurs et les barres groupées ; les figures sont rendues ici même, et vous pouvez réexécuter ou modifier chacune d’elles en direct.

Barres d’effectifs : geom_bar()

Lorsque vous voulez savoir combien de lignes se trouvent dans chaque catégorie, associez la catégorie à x et laissez geom_bar() compter. Ici, le nombre de voitures par class dans le jeu de données intégré mpg.

library(ggplot2)
ggplot(mpg, aes(x = class)) +
  geom_bar(fill = "#3a86d4") +
  labs(x = "Vehicle class", y = "Count") +
  theme_minimal()

ggplot2 bar chart counting the number of cars in each vehicle class in the mpg dataset.

Barres de valeurs : geom_col()

Lorsque vous disposez déjà des nombres — moyennes de groupe, totaux — utilisez geom_col(). Résumez d’abord les données ToothGrowth à la longueur moyenne des dents par dose, puis tracez une barre par dose.

library(ggplot2)
# mean tooth length per dose
tg <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
tg$dose <- factor(tg$dose)

ggplot(tg, aes(x = dose, y = len)) +
  geom_col(fill = "#3a86d4") +
  labs(x = "Dose (mg/day)", y = "Mean tooth length") +
  theme_minimal()

ggplot2 bar chart of mean tooth length for each vitamin C dose, drawn with geom_col.

Ajouter des étiquettes de valeurs

Inscrivez le nombre sur chaque barre avec geom_text(). Décalez-le juste au-dessus de la barre avec vjust.

library(ggplot2)
tg <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
tg$dose <- factor(tg$dose)

ggplot(tg, aes(x = dose, y = len)) +
  geom_col(fill = "#3a86d4") +
  geom_text(aes(label = round(len, 1)), vjust = -0.3) +
  labs(x = "Dose (mg/day)", y = "Mean tooth length") +
  theme_minimal()

ggplot2 bar chart of mean tooth length per dose with the rounded mean printed above each bar.

Barres horizontales

Les longues étiquettes de catégorie se lisent mieux à la verticale. Ajoutez coord_flip() pour basculer le graphique de côté.

library(ggplot2)
tg <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
tg$dose <- factor(tg$dose)

ggplot(tg, aes(x = dose, y = len)) +
  geom_col(fill = "#3a86d4") +
  coord_flip() +
  labs(x = "Dose (mg/day)", y = "Mean tooth length") +
  theme_minimal()

ggplot2 horizontal bar chart of mean tooth length per dose, created with coord_flip.

Colorer les barres par groupe

Associez la variable de groupement à fill pour colorer chaque barre, en utilisant une palette viridis adaptée au daltonisme.

library(ggplot2)
tg <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
tg$dose <- factor(tg$dose)

ggplot(tg, aes(x = dose, y = len, fill = dose)) +
  geom_col() +
  scale_fill_viridis_d() +
  labs(x = "Dose (mg/day)", y = "Mean tooth length", fill = "Dose") +
  theme_minimal()

ggplot2 bar chart of mean tooth length per dose with each bar filled a colourblind-safe viridis colour.

Comparer des groupes : groupées ou empilées

Associez une seconde variable à fill pour comparer des groupes au sein de chaque catégorie. Les barres s’empilent par défaut ; définissez position = "dodge" pour les placer côte à côte. Résumez d’abord selon dose et supp à la fois.

library(ggplot2)
tg2 <- aggregate(len ~ dose + supp, data = ToothGrowth, FUN = mean)
tg2$dose <- factor(tg2$dose)

ggplot(tg2, aes(x = dose, y = len, fill = supp)) +
  geom_col(position = "dodge") +
  scale_fill_viridis_d() +
  labs(x = "Dose (mg/day)", y = "Mean tooth length", fill = "Supplement") +
  theme_minimal()

ggplot2 grouped bar chart of mean tooth length by dose, with orange-juice and ascorbic-acid bars side by side at each dose.

Retirez position = "dodge" (ou définissez position = "stack") pour empiler les groupes à la place ; utilisez position = "fill" pour afficher les parts de chaque catégorie en proportions.

library(ggplot2)
tg2 <- aggregate(len ~ dose + supp, data = ToothGrowth, FUN = mean)
tg2$dose <- factor(tg2$dose)

ggplot(tg2, aes(x = dose, y = len, fill = supp)) +
  geom_col(position = "stack") +
  scale_fill_viridis_d() +
  labs(x = "Dose (mg/day)", y = "Mean tooth length", fill = "Supplement") +
  theme_minimal()

ggplot2 stacked bar chart of mean tooth length by dose, with the two supplements stacked within each dose bar.

Vous voulez des barres d’erreur sur vos barres (écart-type, erreur standard, intervalles de confiance) ? C’est une courte leçon à part entière — Ajouter des barres d’erreur avec ggplot2 — à venir prochainement dans cette série.

Étiqueter un diagramme en barres empilées

Pour inscrire chaque valeur à l’intérieur de son segment, placez l’étiquette au point milieu du segment. ggplot2 empile du haut vers le bas : calculez donc, par dose, la somme cumulée de len moins la moitié de chaque valeur — l’étiquette tombe ainsi au centre de chaque bloc. En R de base, ave() applique cumsum() au sein de chaque groupe dose. Un piège : le texte blanc disparaît sur une barre claire. Adaptez la couleur de l’étiquette à son remplissage — texte foncé sur le segment clair (jaune), blanc sur le segment foncé (violet) — et passez-la par scale_colour_identity().

library(ggplot2)
tg2 <- aggregate(len ~ dose + supp, data = ToothGrowth, FUN = mean)
tg2$dose <- factor(tg2$dose)
# order so stacking (top-down) matches the cumulative sum
tg2 <- tg2[order(tg2$dose, rev(tg2$supp)), ]
# midpoint of each segment: running total within dose, minus half this value
tg2$ypos <- ave(tg2$len, tg2$dose, FUN = cumsum) - 0.5 * tg2$len
# readable label colour PER fill: dark on the light (yellow) VC bar, white on the dark (purple) OJ bar
tg2$lab_col <- ifelse(tg2$supp == "VC", "grey15", "white")

ggplot(tg2, aes(x = dose, y = len, fill = supp)) +
  geom_col(position = "stack") +
  geom_text(aes(y = ypos, label = round(len, 1), colour = lab_col), fontface = "bold") +
  scale_fill_viridis_d() +
  scale_colour_identity() +
  labs(x = "Dose (mg/day)", y = "Mean tooth length", fill = "Supplement") +
  theme_minimal()

ggplot2 stacked bar chart of mean tooth length by dose with each supplement's value printed at the midpoint of its segment.

Chaque segment porte désormais sa propre moyenne, centrée dans son bloc — bien plus facile à lire que de remonter les valeurs jusqu’à l’axe des y.

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 diagramme en barres avec matplotlib/seaborn arrive dans la série Python.

🟢 Avec un agent IA

Demandez à Prova « dois-je utiliser geom_bar ou geom_col pour mes données ? » — elle répond avec du code que vous pouvez exécuter sur votre propre tableau de données, pour que le choix soit reproductible. The runtime is the judge. Ask Prova →

Questions fréquentes

geom_bar() compte pour vous les lignes de chaque catégorie (il utilise stat = "count", vous n’associez donc que x), tandis que geom_col() trace une barre à la valeur que vous fournissez (il utilise stat = "identity", vous associez donc à la fois x et y). Utilisez geom_col() lorsque vous disposez déjà des nombres, comme des moyennes de groupe ou des totaux.

Ajoutez une couche geom_text() qui associe la valeur à label, par exemple geom_text(aes(label = round(len, 1)), vjust = -0.3). Le vjust négatif décale le texte juste au-dessus de chaque barre au lieu de le poser dessus.

Ajoutez coord_flip() pour intervertir les axes x et y, ce qui bascule le graphique de côté — pratique lorsque les étiquettes de catégorie sont longues et se chevauchent sur un axe vertical.

Associez votre seconde variable à fill, puis définissez position = "dodge" dans geom_col() (ou geom_bar()) pour placer les barres côte à côte. Les barres s’empilent par défaut (position = "stack") : le mode dodge est donc le choix explicite à activer pour des barres groupées.

Pour une couleur fixe unique, définissez fill en dehors de aes(), par exemple geom_col(fill = "#3a86d4"). Pour colorer les barres par groupe, associez la variable à l’intérieur de aes(fill = ...) et ajoutez une échelle telle que scale_fill_viridis_d(), adaptée au daltonisme.

Testez vos connaissances

Complétez le code afin que les deux suppléments apparaissent en barres côte à côte au sein de chaque dose (et non empilées).

# geom_col() takes a position argument: position = "dodge"
library(ggplot2) tg2 <- aggregate(len ~ dose + supp, data = ToothGrowth, FUN = mean) tg2$dose <- factor(tg2$dose) ggplot(tg2, aes(x = dose, y = len, fill = supp)) + geom_col(position = "dodge")
library(ggplot2)
tg2 <- aggregate(len ~ dose + supp, data = ToothGrowth, FUN = mean)
tg2$dose <- factor(tg2$dose)
ggplot(tg2, aes(x = dose, y = len, fill = supp)) +
  geom_col(position = "dodge")

Conclusion

Vous avez construit un diagramme en barres ggplot2 des deux façons — effectifs avec geom_bar() et valeurs avec geom_col() — ajouté des étiquettes, basculé à l’horizontale, coloré par groupe, et comparé des groupes avec des barres groupées et empilées. Ensuite, ajoutez des barres d’erreur pour montrer la variabilité, et comparez des distributions avec la boîte à moustaches et le graphique en violon.

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 = {Diagramme en barres avec R : guide ggplot2},
  date = {2026-06-20},
  url = {https://www.datanovia.com/learn/data-visualization/ggplot2/barplot},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Diagramme en barres avec R : guide ggplot2.” 2026. June 20. https://www.datanovia.com/learn/data-visualization/ggplot2/barplot.