Ajouter du texte à un graphique en R : les fonctions text() et mtext()
Placez du texte à des coordonnées, étiquetez des points, ajoutez du texte en marge et des annotations mathématiques en R de base
Ajoutez du texte à un graphique R de base avec text() et mtext(). Placez-le à des coordonnées x/y, étiquetez chaque point, alignez-le et faites-le pivoter avec pos/adj/srt, stylisez-le avec cex/col/font, écrivez du texte dans les marges, ajoutez des maths avec expression() et dessinez en dehors de la zone de tracé avec xpd.
Date de publication
27 juin 2026
Modifié
7 juillet 2026
AstucePoints clés
Dessinez du texte à l’intérieur du graphique avec text(x, y, labels) — à n’importe quelle coordonnée des données, sans package.
Étiquetez chaque point en passant les coordonnées des données et un vecteur d’étiquettes : text(x, y, labels = names).
Alignez avec pos (1 dessous, 2 gauche, 3 dessus, 4 droite) ou adj ; faites pivoter avec srt ; stylisez avec cex, col, font.
Placez du texte dans une marge avec mtext(text, side =) — c’est là que vivent les titres, légendes et notes d’axe.
Ajoutez de la notation mathématique avec expression() / bquote() ; dessinez du texte en dehors de la zone de tracé avec xpd = TRUE.
Introduction
Vous avez tracé un nuage de points et vous voulez maintenant signaler un point, étiqueter chaque observation ou déposer une note dans la marge. En R de base, cela tient en deux fonctions : text() écrit à l’intérieur de la zone de tracé aux coordonnées que vous choisissez, et mtext() écrit dans l’une des quatre marges qui l’entourent.
Aucune des deux ne lit vos données à votre place — vous leur donnez la position et la chaîne, et elles la dessinent sur la figure courante. Cette leçon couvre le placement de texte à des coordonnées, l’étiquetage de chaque point, son alignement et sa rotation, le style de la couleur et de la taille, le texte en marge, les annotations mathématiques et comment dessiner au-delà du bord du graphique sans qu’il soit rogné.
Vous préférez la grammaire des graphiques ? ggplot2 annote avec geom_text() et annotate() — voir la série ggplot2.
La fonction text()
text() dessine une chaîne à l’intérieur du graphique aux coordonnées que vous donnez, dans la même échelle que vos axes :
text(x, y, labels, pos, offset, adj, srt, cex, col, font)
Argument
Ce qu’il fait
x, y
Où dessiner le texte, en coordonnées des données (la même échelle que les axes).
labels
La chaîne (ou le vecteur de chaînes) à écrire.
pos
Décale le texte par rapport à (x, y) : 1 dessous, 2 gauche, 3 dessus, 4 droite.
offset
De combien pos pousse le texte, en largeurs de caractère.
adj
Alignement fin : 0 gauche, 0.5 centré, 1 droite (un vecteur de longueur 2 règle x et y).
Le reste de la leçon, ce sont ces arguments en pratique. Voici le cas de tous les jours — étiquetez chaque point d’un nuage de points avec son nom, placé juste au-dessus du marqueur :
d <-head(mtcars)plot(d$wt, d$mpg, pch =19, col ="#3a86d4",xlab ="Weight (1000 lbs)", ylab ="Miles per gallon",main ="Mileage vs. car weight")# Label each point with its row name, placed above (pos = 3)text(d$wt, d$mpg, labels =rownames(d),pos =3, cex =0.8, col ="#c1272d")
text(d$wt, d$mpg, labels = rownames(d)) dessine une étiquette par point parce que x, y et labels sont tous des vecteurs de la même longueur. pos = 3 soulève chaque étiquette au-dessus de son marqueur pour qu’elle ne repose pas sur le point ; cex = 0.8 réduit le texte et col définit sa couleur.
Placer du texte à une seule coordonnée
Pour annoter un seul endroit, passez un unique x, y et une seule chaîne. Le texte est centré sur ce point sauf si vous le décalez avec pos.
x <-seq(0, 10, length.out =100)y <-sin(x)plot(x, y, type ="l", col ="#3a86d4", lwd =2, xlab ="x", ylab ="sin(x)")# Annotate the first peaktext(pi /2, 1, labels ="peak", pos =3, font =2)
pos = 3 pousse « peak » au-dessus du point (π/2, 1) pour qu’il dégage la courbe, et font = 2 le met en gras.
Aligner et décaler : pos, offset et adj
pos est le moyen rapide de pousser le texte hors d’un point dans l’une de quatre directions ; offset contrôle de combien, en largeurs de caractère. Pour un contrôle plus fin, adj définit l’alignement du texte par rapport à (x, y) : adj = 0 aligne à gauche, 0.5 centre, 1 aligne à droite.
plot(c(0, 10), c(0, 10), type ="n", xlab ="", ylab ="",main ="pos and adj")# One point, labelled in all four pos directionspoints(3, 8, pch =19, col ="#3a86d4")text(3, 8, "pos = 1", pos =1)text(3, 8, "pos = 2", pos =2)text(3, 8, "pos = 3", pos =3)text(3, 8, "pos = 4", pos =4)# adj controls alignment at the exact coordinate (dashed guide line)abline(v =6, lty =2, col ="grey70")text(6, 6, "adj = 0", adj =0)text(6, 4, "adj = 0.5", adj =0.5)text(6, 2, "adj = 1", adj =1)
Utilisez pos quand vous voulez simplement que l’étiquette dégage un marqueur ; tournez-vous vers adj quand vous avez besoin que le texte commence, se centre ou se termine exactement à une coordonnée (par exemple, aligner plusieurs étiquettes sur une ligne guide).
Faire pivoter le texte avec srt
srt fait pivoter la chaîne de l’angle donné en degrés — pratique pour des étiquettes inclinées ou un texte qui suit une ligne raide.
plot(c(0, 10), c(0, 10), type ="n", xlab ="", ylab ="", main ="srt rotation")text(2, 5, "0 degrees", srt =0, col ="#3a86d4", font =2)text(5, 5, "45 degrees", srt =45, col ="#3a86d4", font =2)text(8, 5, "90 degrees", srt =90, col ="#3a86d4", font =2)
srt = 45 est le choix courant pour incliner des étiquettes serrées afin qu’elles cessent de se chevaucher.
Styliser le texte : cex, col et font
Trois arguments couvrent l’essentiel du style : cex ajuste la taille, col définit la couleur et font choisit le style — 1 normal, 2 gras, 3 italique, 4 gras-italique.
plot(c(0, 10), c(0, 10), type ="n", xlab ="", ylab ="", main ="cex, col and font")text(5, 8, "font = 1, normal", font =1, cex =1.0, col ="#3a86d4")text(5, 6, "font = 2, bold", font =2, cex =1.2, col ="#c1272d")text(5, 4, "font = 3, italic", font =3, cex =1.0, col ="#5fad56")text(5, 2, "font = 4, bold-italic", font =4, cex =1.4, col ="#8a5fbf")
Combinez-les librement — text(..., cex = 1.4, col = "#c1272d", font = 2) donne une étiquette grande, en gras et rouge pour mettre en évidence une annotation importante.
Étiqueter chaque point d’un nuage de points
La tâche réelle la plus courante est d’étiqueter chaque observation. Passez les mêmes vecteurs de coordonnées que vous avez tracés, plus un vecteur d’étiquettes, et ajoutez pos pour que le texte dégage les marqueurs.
plot(iris$Sepal.Length, iris$Sepal.Width,pch =19, col ="#3a86d4",xlab ="Sepal length", ylab ="Sepal width",main ="Label the extremes")# Label only the four most extreme points so the plot stays readableext <-order(iris$Sepal.Length)[c(1, 2, 149, 150)]text(iris$Sepal.Length[ext], iris$Sepal.Width[ext],labels =as.character(iris$Species[ext]),pos =4, cex =0.75, col ="#c1272d")
Étiqueter les 150 points serait illisible, alors nous choisissons les extrêmes avec order() et n’étiquetons que ceux-là. Ce schéma « étiqueter les points qui comptent » garde un nuage de points chargé lisible.
Ajouter du texte dans les marges avec mtext()
mtext() écrit dans l’une des quatre marges autour du graphique plutôt qu’à l’intérieur — le bon endroit pour un sous-titre, une note de source ou une seconde étiquette d’axe. side choisit la marge : 1 bas, 2 gauche, 3 haut, 4 droite. line pousse le texte plus loin vers l’extérieur, et adj le fait glisser le long de la marge.
par(mar =c(5, 5, 4, 5))plot(1:10, 1:10, pch =19, col ="#3a86d4", xlab ="x", ylab ="y")mtext("Top margin (side = 3)", side =3, line =1, font =2)mtext("Bottom note (side = 1)", side =1, line =3, cex =0.8)mtext("Left (side = 2)", side =2, line =3, col ="#c1272d")mtext("Right (side = 4)", side =4, line =3, col ="#5fad56")
Utilisez mtext() pour tout ce qui appartient autour du graphique plutôt que sur les données. Un schéma courant est un petit sous-titre sous le titre principal — mtext("subtitle", side = 3, line = 0.3, cex = 0.9) — ou une note de source de données dans la marge du bas avec adj = 1 pour l’aligner à droite.
Ajouter des annotations mathématiques
Pour composer des formules, des lettres grecques ou des indices, enveloppez le texte dans expression(). R le rend avec sa syntaxe plotmath, de sorte que beta, hat(), sum(), frac() et x[i] se dessinent tous comme une vraie notation.
Quand une partie de l’étiquette est une valeur que vous calculez, utilisez plutôt bquote() — il vous permet d’insérer une valeur R dans l’expression avec .() :
plot(mtcars$wt, mtcars$mpg, pch =19, col ="#3a86d4",xlab ="Weight", ylab ="Miles per gallon")r <-round(cor(mtcars$wt, mtcars$mpg), 2)text(4.5, 30, bquote(rho == .(r)), cex =1.3, col ="#c1272d")
bquote(rho == .(r)) dessine le ρ grec suivi de la corrélation calculée, de sorte que l’annotation se met à jour elle-même si les données changent.
Dessiner du texte en dehors de la zone de tracé avec xpd
Par défaut, le texte est rogné à la zone de tracé : tout ce que vous placez au-delà des axes est coupé. Définissez xpd = TRUE pour laisser le texte (et d’autres annotations) déborder dans les marges — utile pour une étiquette qui doit se trouver juste à l’extérieur des données.
par(mar =c(5, 4, 4, 2))plot(1:10, 1:10, pch =19, col ="#3a86d4", xlab ="x", ylab ="y")# y = 11 is above the plot region; xpd = TRUE keeps it from being clippedtext(5, 11, "drawn outside the plot region (xpd = TRUE)",xpd =TRUE, font =3, col ="#c1272d")
Sans xpd = TRUE, cette étiquette, posée à y = 11 au-dessus de l’axe du haut, n’apparaîtrait tout simplement pas. Pour un texte qui appartient franchement à une marge, mtext() est plus propre ; tournez-vous vers xpd = TRUE quand vous avez besoin d’une annotation flottante à une coordonnée précise juste à l’extérieur des données.
Essayez en direct
Changez les étiquettes, les positions, les couleurs ou l’angle srt et appuyez sur Run — cela s’exécute dans votre navigateur via webR, sans installation.
🟢 Avec un agent IA
Demandez à Prova« pourquoi mes étiquettes de points sont-elles rognées au bord du graphique ? » — elle répond avec du code R de base que vous pouvez exécuter, donc la correction est reproductible. The runtime is the judge.Demander à Prova →
Problèmes courants
Le texte est rogné au bord du graphique. Tout ce que vous dessinez en dehors de la zone des données est coupé par défaut. Ajoutez xpd = TRUE à l’appel text() pour le laisser déborder dans les marges, ou utilisez mtext() si le texte appartient réellement à une marge. Élargir d’abord les marges avec par(mar = ...) lui donne de la place.
Les étiquettes se chevauchent sur un nuage de points chargé. N’étiquetez pas chaque point — choisissez ceux qui comptent avec order() ou une condition, n’étiquetez que ceux-là, et utilisez pos pour les pousser hors des marqueurs. Pour de nombreux points quasi identiques, faites pivoter les étiquettes avec srt = 45 ou réduisez-les avec cex.
expression() affiche le texte littéral au lieu des maths. Vous avez passé une simple chaîne. Enveloppez la formule dans expression(...) (sans guillemets à l’intérieur), et utilisez bquote(... .(value) ...) quand vous avez besoin d’insérer une valeur calculée dans la notation.
Questions fréquentes
NoteComment ajouter du texte à un graphique en R ?
Appelez text(x, y, labels) après plot(). Donnez-lui les coordonnées dans la même échelle que vos axes et la chaîne à dessiner. Ajoutez pos (1 dessous, 2 gauche, 3 dessus, 4 droite) pour décaler le texte par rapport au point, et cex, col, font pour le styliser.
NoteComment étiqueter chaque point d’un nuage de points en R ?
Passez les vecteurs de coordonnées tracés et un vecteur d’étiquettes : text(x, y, labels = names, pos = 3). Parce que x, y et labels ont tous la même longueur, R dessine une étiquette par point. Pour un graphique chargé, n’étiquetez que les points qui comptent (sélectionnez-les avec order() ou une condition) pour qu’il reste lisible.
NoteQuelle est la différence entre text() et mtext() en R ?
text() dessine à l’intérieur de la zone de tracé aux coordonnées des données que vous choisissez ; mtext() dessine dans l’une des quatre marges autour du graphique (side = 1 bas, 2 gauche, 3 haut, 4 droite). Utilisez text() pour annoter les données, mtext() pour les sous-titres, légendes et notes de marge.
NoteComment faire pivoter du texte sur un graphique en R ?
Passez srt (rotation de chaîne) à text() en degrés — text(x, y, "label", srt = 45) l’incline de 45°. C’est la correction habituelle pour des étiquettes serrées qui se chevauchent.
NoteComment ajouter une formule mathématique ou une lettre grecque à un graphique R ?
Enveloppez-la dans expression() — par exemple text(x, y, expression(bar(x) == mu)). R la rend avec plotmath, de sorte que beta, hat(), frac(), sum() et x[i] se dessinent comme une vraie notation. Utilisez bquote() avec .() quand vous avez besoin d’insérer une valeur calculée dans l’expression.
Testez vos connaissances
ImportantExercice : étiqueter et annoter un nuage de points
Le graphique ci-dessous montre le poids de mtcars en fonction de la consommation mais n’a pas d’étiquettes. (1) Étiquetez chaque point avec son nom de ligne placé au-dessus du marqueur, en rouge. (2) Ajoutez le texte « heaviest » à côté du point ayant le poids le plus élevé, pivoté de 45°.
AstuceIndice
Pour (1), utilisez text(d$wt, d$mpg, labels = rownames(d), pos = 3, col = "#c1272d"). Pour (2), trouvez le plus lourd avec which.max(d$wt) et passez srt = 45 à un second appel text().
AstuceSolution
text(d$wt, d$mpg, labels =rownames(d),pos =3, cex =0.8, col ="#c1272d")i <-which.max(d$wt)text(d$wt[i], d$mpg[i], "heaviest",pos =4, srt =45, font =2)
Le premier appel étiquette tous les points au-dessus de leurs marqueurs ; le second n’annote que la voiture la plus lourde, inclinée avec srt = 45.
Vérification rapide. Vous voulez qu’une note apparaisse juste au-dessus de l’axe du haut, en dehors de la zone des données. Quel argument l’empêche d’être rognée ?
AstuceAfficher la réponse
xpd = TRUE. Par défaut, R de base rogne le texte à la zone de tracé ; xpd = TRUE le laisse dessiner dans les marges. (mtext() est l’alternative quand le texte appartient à une marge.)
Conclusion
text() et mtext() sont les deux fonctions dont vous avez besoin pour annoter un graphique R de base. Utilisez text(x, y, labels) pour écrire à l’intérieur des données à des coordonnées — étiquetez chaque point, alignez avec pos/adj, faites pivoter avec srt et stylisez avec cex/col/font. Utilisez mtext(text, side =) pour les sous-titres et notes de marge, expression()/bquote() pour les maths, et xpd = TRUE quand une étiquette doit se trouver en dehors du graphique.
Leçons connexes
Ajouter une légende — indiquez quelle série est laquelle, le compagnon de l’annotation de points. · Titres de graphique — le titre principal, le sous-titre et les étiquettes d’axes qui encadrent le texte que vous ajoutez. · Couleurs en R — construisez le jeu de couleurs qu’utilisent vos annotations.
Cette leçon est reproductible : chaque figure a été produite par le code affiché, exécuté lors de la génération du site (si elles s’affichent, le code fonctionne), et le bac à sable se réexécute en direct dans votre navigateur. Modifiez n’importe quel bloc et appuyez sur Run. The runtime is the judge.
@online{2026,
author = {},
title = {Ajouter du texte à un graphique en R : les fonctions text()
et mtext()},
date = {2026-06-27},
url = {https://www.datanovia.com/learn/data-visualization/r-base/add-text-to-plot},
langid = {fr}
}