Étiqueter des points et annoter un graphique ggplot2 — en direct dans votre navigateur
Apprenez à ajouter du texte à un graphique ggplot2 en R — étiquetez les points avec geom_text() et geom_label(), placez une annotation fixe avec annotate(), contrôlez la taille, la police et la justification, décalez les étiquettes de leurs points et repoussez les chevauchements avec ggrepel. Modifiez et exécutez le code en direct, sans installation.
Date de publication
20 juin 2026
Modifié
7 juillet 2026
AstucePoints clés
Ajoutez du texte issu de vos données avec geom_text() — associez une colonne à aes(label = ...) pour que chaque ligne reçoive sa propre étiquette.
geom_label() dessine le même texte à l’intérieur d’une boîte arrondie, pour le faire ressortir sur un arrière-plan chargé.
Placez une note fixe unique à des coordonnées choisies avec annotate("text", x = , y = , label = ) — elle ne dépend jamais des données.
Mettez le texte en forme avec size, fontface ("bold", "italic") et family ; positionnez-le avec hjust/vjust.
Décalez les étiquettes de leurs points avec nudge_x/nudge_y, et désencombrez avec check_overlap = TRUE.
Quand les étiquettes se chevauchent encore, ggrepel (geom_text_repel()) les écarte à l’aide de lignes de rappel.
Chaque graphique ci-dessous est rendu pour vous — modifiez ensuite n’importe quel exemple en direct dans le bac à sable.
Une fois un graphique ggplot2 dessiné, la question suivante est presque toujours : « comment écrire dessus ? » — étiqueter les points, mettre en évidence une valeur précise ou ajouter une note d’en-tête. En R, ggplot2 vous offre deux couches de texte — geom_text() et geom_label() pour les étiquettes pilotées par les données, et annotate() pour une note fixe et ponctuelle — ainsi que les réglages pour les dimensionner, les styliser, les justifier et les décaler. Cette leçon construit chacun pas à pas ; 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é mtcars : consommation et conception de 32 voitures d’un magazine de 1974. Nous associons le poids (wt, en milliers de livres) à l’axe des x et la consommation (mpg, miles par gallon) à l’axe des y, et nous utilisons les noms des voitures (les noms de lignes) comme étiquettes.
Étiqueter des points avec geom_text()
geom_text() écrit un texte par ligne. Associez la colonne que vous voulez afficher à aes(label = ...) — ici les noms des voitures, qui se trouvent dans les noms de lignes, donc nous les extrayons d’abord dans une vraie colonne (chaque bloc est autonome, il recrée donc cette colonne lui-même).
library(ggplot2)cars <- mtcarscars$name <-rownames(mtcars)ggplot(cars, aes(x = wt, y = mpg, label = name)) +geom_point(colour ="#3a86d4") +geom_text(colour ="#3a86d4", size =3) +labs(x ="Weight (1000 lbs)", y ="Miles per gallon") +theme_minimal()
Étiquettes encadrées avec geom_label()
geom_label() dessine le même texte à l’intérieur d’un rectangle arrondi. La boîte donne au texte un fond plein, de sorte que les étiquettes restent lisibles même lorsqu’elles se posent sur des points ou des lignes de la grille.
library(ggplot2)cars <- mtcarscars$name <-rownames(mtcars)ggplot(cars, aes(x = wt, y = mpg, label = name)) +geom_point(colour ="#3a86d4") +geom_label(size =2.6, fill ="white") +labs(x ="Weight (1000 lbs)", y ="Miles per gallon") +theme_minimal()
Une annotation fixe avec annotate()
Pour ajouter une note unique — une légende, une mise en évidence, une étiquette pour une région — utilisez annotate(). Elle n’est pas liée aux données : vous lui donnez le geom ("text"), les coordonnées et la chaîne de caractères. C’est la façon la plus propre d’écrire un seul texte sans créer un data frame d’une seule ligne.
library(ggplot2)ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point(colour ="#3a86d4") +annotate("text", x =4.5, y =30, label ="Light cars\ngo further",colour ="grey30", size =4) +labs(x ="Weight (1000 lbs)", y ="Miles per gallon") +theme_minimal()
Une étiquette unique avec geom_text()
Vous pouvez aussi placer une étiquette fixe unique avec geom_text() en passant directement x, y et label (en dehors de aes()). annotate() est généralement plus net pour cela, mais geom_text() fonctionne de la même façon et est pratique lorsque vous avez déjà la couche sous la main.
library(ggplot2)ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point(colour ="#3a86d4") +geom_text(x =3, y =33, label ="32 cars, 1974", colour ="grey30", size =4) +labs(x ="Weight (1000 lbs)", y ="Miles per gallon") +theme_minimal()
Contrôler la taille du texte
Définissez size pour agrandir ou réduire les étiquettes. C’est une constante (en millimètres), passée en dehors d’aes(), donc elle s’applique de la même façon à chaque étiquette. Optez pour une petite taille quand vous avez beaucoup de points.
library(ggplot2)cars <- mtcarscars$name <-rownames(mtcars)ggplot(cars, aes(x = wt, y = mpg, label = name)) +geom_point(colour ="#3a86d4") +geom_text(size =4.5, colour ="#3a86d4") +labs(x ="Weight (1000 lbs)", y ="Miles per gallon") +theme_minimal()
Justifier et positionner le texte — hjust, vjust
hjust contrôle l’alignement horizontal (0 = gauche, 0.5 = centre, 1 = droite) et vjust l’alignement vertical (0 = bas, 1 = haut). Ils repositionnent le texte par rapport à son point d’ancrage — définissez hjust = 0 pour pousser chaque étiquette à droite de son point afin que le marqueur reste visible.
fontface met en forme le texte — "plain", "bold", "italic" ou "bold.italic" — et family choisit la police (par exemple "serif", "sans", "mono"). Utilisez-les pour distinguer une annotation des étiquettes de données.
library(ggplot2)ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point(colour ="#3a86d4") +annotate("text", x =4, y =28, label ="Heavier = thirstier",fontface ="bold.italic", family ="serif", size =5, colour ="grey30") +labs(x ="Weight (1000 lbs)", y ="Miles per gallon") +theme_minimal()
Décaler les étiquettes de leurs points
Quand une étiquette se pose juste sur son marqueur, décalez-la avec nudge_x / nudge_y (une fine surcouche autour de position_nudge()). Un petit décalage vers le haut dégage chaque nom de son point sans déplacer les points eux-mêmes.
library(ggplot2)cars <- mtcarscars$name <-rownames(mtcars)ggplot(cars, aes(x = wt, y = mpg, label = name)) +geom_point(colour ="#3a86d4") +geom_text(nudge_y =0.6, size =3, colour ="grey30") +labs(x ="Weight (1000 lbs)", y ="Miles per gallon") +theme_minimal()
Masquer les étiquettes qui se chevauchent avec check_overlap
Avec 32 noms, les étiquettes se chevauchent. check_overlap = TRUE est la solution la plus rapide intégrée à ggplot2 : elle dessine les étiquettes dans l’ordre et ignore toute étiquette qui en chevaucherait une déjà placée. Vous gardez les étiquettes lisibles et perdez l’encombrement — sans aucun paquet supplémentaire.
Associez une variable de regroupement à aes(colour = ...) pour colorer le texte par catégorie. Utilisez une palette adaptée au daltonisme comme viridis (scale_colour_viridis_d()) afin que la figure soit lisible par tous, en couleur ou à l’impression. Ici, nous colorons chaque nom de voiture selon son nombre de cylindres. (Pour savoir où placer — ou comment masquer — la légende qui en résulte, consultez le guide des légendes ggplot2.)
Pour aller plus loin : repousser les chevauchements avec ggrepel
check_overlapsupprime les étiquettes qui se chevauchent ; quand vous voulez toutes les garder et les déplacer à la place, le paquet compagnon ggrepel ajoute geom_text_repel() et geom_label_repel(), qui écartent les étiquettes à l’aide de fines lignes de rappel jusqu’à chaque point — la méthode standard pour étiqueter chaque point d’un nuage de points dense. Installez-le avec install.packages("ggrepel") ; les outils d’annotation de cette leçon relèvent tous de ggplot2 de base.
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 matplotlib sur le texte et les annotations arrive dans la série Python.
🟢 Avec un agent IA
Demandez à Prova« comment étiqueter uniquement les voitures dont le mpg dépasse 25 dans ce graphique ? » — 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
NoteQuelle est la différence entre geom_text() et annotate() dans ggplot2 ?
geom_text() est piloté par les données : il dessine une étiquette par ligne, vous associez donc une colonne à aes(label = ...). annotate("text", ...) ajoute une note fixe et unique aux coordonnées que vous indiquez et ignore complètement les données — utilisez-le pour une légende ou une mise en évidence ponctuelle plutôt que de construire un data frame d’une seule ligne.
NoteComment ajouter un encadré autour des étiquettes dans ggplot2 ?
Utilisez geom_label() au lieu de geom_text() — il dessine le même texte à l’intérieur d’un rectangle arrondi. Définissez fill = "white" pour donner au texte un fond plein afin qu’il reste lisible par-dessus les points et les lignes de la grille.
NotePourquoi mes étiquettes ggplot2 se chevauchent-elles et comment y remédier ?
Avec beaucoup de points, les étiquettes se chevauchent. La solution intégrée est geom_text(check_overlap = TRUE), qui dessine les étiquettes dans l’ordre et ignore toute étiquette qui en chevaucherait une déjà placée. Pour garder toutes les étiquettes et les écarter à la place, utilisez geom_text_repel() du paquet ggrepel.
NoteComment décaler une étiquette ggplot2 de son point ?
Ajoutez nudge_x et/ou nudge_y à geom_text() — par exemple geom_text(nudge_y = 0.6) dégage chaque étiquette de son marqueur sans déplacer les points. Vous pouvez aussi réaligner par rapport au point d’ancrage avec hjust (0 = gauche, 1 = droite) et vjust (0 = bas, 1 = haut).
NoteComment modifier la taille et le style de la police du texte dans ggplot2 ?
Définissez size (une constante en millimètres, passée en dehors d’aes()) pour dimensionner toutes les étiquettes de la même façon. Utilisez fontface pour le style ("bold", "italic", "bold.italic") et family pour la police ("serif", "sans", "mono").
Testez vos connaissances
ImportantExercice : placer une annotation fixe
Complétez le code pour qu’une note unique affichant « Most efficient » apparaisse en haut à gauche du graphique, en x = 2, y = 33.
# Use annotate("text", x = , y = , label = ) — the geom is "text"
library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point(colour = "#3a86d4") +
annotate("text", x = 2, y = 33, label = "Most efficient") +
theme_minimal()
library(ggplot2)ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point(colour ="#3a86d4") +annotate("text", x =2, y =33, label ="Most efficient") +theme_minimal()
Conclusion
Vous avez ajouté du texte à un graphique ggplot2 à partir de vos données avec geom_text() et geom_label(), placé une note fixe avec annotate(), contrôlé la taille, la police et la justification, décalé les étiquettes de leurs points, désencombré avec check_overlap, coloré les étiquettes par groupe avec une palette adaptée au daltonisme, et repoussé les chevauchements avec ggrepel. Pour définir le titre, le sous-titre et les libellés d’axes du graphique (un autre type de « texte »), consultez titres, sous-titres et légendes ; pour le type de graphique lui-même, commencez par le nuage de points.
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 = {Ajouter du texte et des annotations dans ggplot2},
date = {2026-06-20},
url = {https://www.datanovia.com/learn/data-visualization/ggplot2/text-annotations},
langid = {fr}
}