Ajouter une légende en R : la fonction legend()

Indiquez quelle ligne est laquelle, positionnez-la et stylisez la boîte avec R de base

Ajoutez une légende à un graphique R de base avec la fonction legend(). Positionnez-la par mot-clé ou par coordonnées x/y, définissez les étiquettes, faites correspondre les couleurs, les symboles de points et les types de lignes, ajoutez un titre, dessinez ou supprimez la boîte, et ajoutez des légendes à boxplot et barplot.

Date de publication

27 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Ajoutez une légende à n’importe quel graphique R de base avec legend() — aucun package nécessaire.
  • Placez-la avec un mot-clé de position ("topright", "bottomleft", …) ou des coordonnées x, y exactes.
  • Définissez les étiquettes avec legend=, puis accordez le graphique avec col, pch (points), lty (lignes) ou fill (boîtes remplies).
  • Ajoutez un titre avec title= ; contrôlez la boîte qui entoure la légende avec bty, box.lty, box.lwd, box.col.
  • boxplot() et barplot() n’affichent aucune légende par défaut — ajoutez-en une vous-même et utilisez fill pour accorder les échantillons de couleur.

Introduction

Vous avez tracé deux lignes sur un même graphique, ou coloré une boîte à moustaches par groupe — et maintenant rien n’indique au lecteur laquelle est laquelle. En R de base, la solution tient en une fonction : legend(). Vous l’appelez après plot(), et elle dessine une légende sur la figure courante.

Le piège, c’est que les graphiques de base ne gardent pas trace de vos couleurs et de vos styles pour vous. Vous les redéclarez dans l’appel à legend(), dans le même ordre que celui de votre tracé. Réussissez cet ordre et la légende accorde le graphique ; ratez-le et des points rouges finissent étiquetés « bleu ». Cette leçon parcourt le positionnement, les échantillons (col/pch/lty/fill), le titre et la boîte — puis les légendes pour boxplot et barplot.

Vous préférez la grammaire des graphiques ? ggplot2 construit la légende automatiquement — voir légende dans la série ggplot2.

La fonction legend()

Un appel minimal à legend() prend une position, le texte des étiquettes et les échantillons qui accordent votre graphique :

legend(x, y = NULL, legend, col, pch, lty, fill, title, bty)
Argument Ce qu’il fait
x, y Où placer la légende : un mot-clé (x = "topright") ou des coordonnées (x, y).
legend Un vecteur de caractères d’étiquettes, une par entrée.
col Couleurs des points/lignes à côté de chaque étiquette.
pch Symboles de points (à utiliser quand le graphique trace des points).
lty Types de lignes (à utiliser quand le graphique trace des lignes).
fill Couleurs des boîtes remplies à côté de chaque étiquette (à utiliser pour les barres/boîtes).
title Un titre affiché au-dessus des entrées.
bty Type de boîte : "o" dessine une boîte (défaut), "n" la supprime.

Le reste de la leçon met ces arguments en pratique.

Une première légende : deux lignes

Voici le cas courant — deux séries sur un même graphique. Nous traçons la première avec plot(), ajoutons la seconde avec lines(), puis étiquetons les deux. Les entrées de legend() répètent les mêmes col et lty que ceux du tracé, dans le même ordre, pour que la légende accorde le graphique.

x  <- 1:10
y1 <- x
y2 <- x^1.3

plot(x, y1, type = "b", pch = 19, lty = 1, col = "#3a86d4",
     xlab = "x", ylab = "y")
lines(x, y2, type = "b", pch = 17, lty = 2, col = "#e07b39")

legend("topleft",
       legend = c("Linear", "Curved"),
       col = c("#3a86d4", "#e07b39"),
       pch = c(19, 17),
       lty = c(1, 2))

A base R line plot of two upward curves, one azure solid and one orange dashed, with a two-entry legend in the top-left corner matching the colours and line types.

legend = c("Linear", "Curved") définit le texte. col, pch et lty donnent à chaque entrée la couleur, le symbole et le style de ligne à dessiner — listés dans l’ordre où les étiquettes apparaissent. Comme les deux lignes utilisent à la fois des points et des lignes, nous passons à la fois pch et lty ; supprimez celui que votre graphique n’utilise pas.

Positionner par mot-clé

La façon la plus simple de placer une légende est un mot-clé. Neuf sont disponibles : "bottomright", "bottom", "bottomleft", "left", "topleft", "top", "topright", "right" et "center". R choisit pour vous l’emplacement exact à l’intérieur de la région du graphique.

x <- 0:64 / 64
y <- sin(3 * pi * x)
plot(x, y, type = "n", xlab = "x", ylab = "y")

for (pos in c("bottomright", "bottom", "bottomleft", "left", "topleft",
              "top", "topright", "right", "center")) {
  legend(pos, legend = pos, pch = 1, title = pos)
}

An empty base R plot showing the nine legend position keywords, each placed at the location it names.

Choisissez le mot-clé qui se trouve dans le coin le plus vide de vos données. "topleft" et "bottomright" sont les choix sûrs habituels.

Positionner par coordonnées exactes

Pour un contrôle total, donnez x et y en coordonnées de données — la même échelle que vos axes. Le coin supérieur gauche de la légende est placé à ce point. C’est ainsi que vous glissez une légende dans un espace précis.

x  <- 1:10
y1 <- x
y2 <- x^1.3

plot(x, y1, type = "b", pch = 19, col = "#3a86d4", xlab = "x", ylab = "y")
lines(x, y2, type = "b", pch = 17, lty = 2, col = "#e07b39")

# Place the legend's top-left corner at (1, 9)
legend(x = 1, y = 9,
       legend = c("Linear", "Curved"),
       col = c("#3a86d4", "#e07b39"),
       pch = c(19, 17), lty = c(1, 2))

A base R line plot with a legend anchored at the data coordinates x = 1, y = 9, sitting in the upper-left gap.

Vous n’êtes pas sûr des coordonnées ? Exécutez legend(locator(1), ...) dans une session R interactive et cliquez à l’endroit voulu — locator(1) renvoie les x/y que vous avez cliqués. (Cela nécessite un périphérique graphique actif, donc ne fonctionne ni dans cette page rendue ni dans le bac à sable, mais c’est la façon la plus rapide de positionner à la main.)

Ajoutez un peu d’espace par rapport au bord du graphique avec inset — une fraction de la région du graphique :

x  <- 1:10
y1 <- x
y2 <- x^1.3

plot(x, y1, type = "b", pch = 19, col = "#3a86d4", xlab = "x", ylab = "y")
lines(x, y2, type = "b", pch = 17, lty = 2, col = "#e07b39")

legend("topright", inset = 0.05,
       legend = c("Linear", "Curved"),
       col = c("#3a86d4", "#e07b39"),
       pch = c(19, 17), lty = c(1, 2))

A base R line plot with a top-right legend inset five percent away from the plot border so it does not touch the edge.

Titre, police et arrière-plan

title= ajoute un titre au-dessus des entrées. text.font stylise le texte des étiquettes — 1 normal, 2 gras, 3 italique, 4 gras-italique. bg= remplit la boîte d’une couleur d’arrière-plan.

x  <- 1:10
y1 <- x
y2 <- x^1.3

plot(x, y1, type = "b", pch = 19, col = "#3a86d4", xlab = "x", ylab = "y")
lines(x, y2, type = "b", pch = 17, lty = 2, col = "#e07b39")

legend("topleft",
       legend = c("Linear", "Curved"),
       col = c("#3a86d4", "#e07b39"),
       pch = c(19, 17), lty = c(1, 2),
       title = "Series", text.font = 3, bg = "#eef3fb")

A base R line plot whose legend has a bold-italic title 'Series', italic labels, and a light background fill.

La boîte de la légende

Par défaut, legend() dessine une fine boîte. Stylisez sa bordure avec box.lty (type de ligne), box.lwd (largeur) et box.col (couleur). Pour supprimer entièrement la boîte, mettez bty = "n" — plus net quand la légende se trouve au-dessus d’une zone vide.

op <- par(mfrow = c(1, 2))
x  <- 1:10
y1 <- x
y2 <- x^1.3

# Left: no box
plot(x, y1, type = "b", pch = 19, col = "#3a86d4", xlab = "x", ylab = "y")
lines(x, y2, type = "b", pch = 17, lty = 2, col = "#e07b39")
legend("topleft", legend = c("Linear", "Curved"),
       col = c("#3a86d4", "#e07b39"), pch = c(19, 17), lty = c(1, 2),
       bty = "n")

# Right: custom border
plot(x, y1, type = "b", pch = 19, col = "#3a86d4", xlab = "x", ylab = "y")
lines(x, y2, type = "b", pch = 17, lty = 2, col = "#e07b39")
legend("topleft", legend = c("Linear", "Curved"),
       col = c("#3a86d4", "#e07b39"), pch = c(19, 17), lty = c(1, 2),
       box.lty = 2, box.lwd = 2, box.col = "#3a86d4")

Two side-by-side base R line plots: the left legend has no box (bty = n), the right has a thick dashed coloured border.

par(op)

Une légende pour une boîte à moustaches

boxplot() ne dessine aucune légende. Quand vous colorez les boîtes par groupe, ajoutez une légende dont les échantillons fill accordent les couleurs des boîtes dans le même ordre. horiz = TRUE dispose les entrées sur une ligne, ce qui convient à une légende courte le long du bas.

grp_cols <- c("#3a86d4", "#f4a259", "#5fad56")  # colourblind-safe set

boxplot(mpg ~ cyl, data = mtcars,
        xlab = "Cylinders", ylab = "Miles per gallon",
        col = grp_cols)

legend("bottomleft", inset = 0.02,
       title = "Cylinders",
       legend = c("4", "6", "8"),
       fill = grp_cols,
       horiz = TRUE, cex = 0.8)

A base R boxplot of miles per gallon by cylinder count, boxes filled with three colourblind-safe colours, and a horizontal legend at the bottom-left labelling 4, 6 and 8 cylinders.

fill = grp_cols dessine un échantillon rempli — le bon repère pour un graphique à aires remplies (utilisez fill, non pch/lty, quand le graphique est en barres ou en boîtes). cex = 0.8 réduit la légende pour qu’elle n’encombre pas les boîtes.

Une légende pour un diagramme en barres

Le même schéma fonctionne pour un barplot() groupé. Passez les couleurs des groupes à la fois aux barres et au fill de la légende, dans le même ordre, pour que les échantillons s’alignent.

grp_cols <- c("#3a86d4", "#e07b39")

# Mean tooth length by supplement (rows) and dose (columns) — base R, no packages
tg  <- aggregate(len ~ supp + dose, data = ToothGrowth, FUN = mean)
mat <- tapply(tg$len, list(tg$supp, tg$dose), FUN = identity)

barplot(mat, beside = TRUE, col = grp_cols,
        xlab = "Dose (mg/day)", ylab = "Mean tooth length")

legend("topleft",
       title = "Supplement",
       legend = rownames(mat),
       fill = grp_cols)

A grouped base R barplot of mean tooth length by dose for two supplements, bars in azure and orange, with a top-left legend labelling the two supplements.

Essayez en direct

Modifiez les étiquettes, les couleurs ou la position et appuyez sur Run — cela s’exécute dans votre navigateur via webR, sans installation.

🟢 Avec un agent IA

Demandez à Prova « pourquoi ma légende affiche-t-elle les mauvaises couleurs ? » — elle répond avec du code R de base que vous pouvez exécuter, donc le correctif est reproductible. The runtime is the judge. Demander à Prova →

Problèmes courants

La légende recouvre les données. Déplacez-la vers le coin le plus vide avec un autre mot-clé de position ("topright" ↔︎ "bottomleft"), poussez-la hors du bord avec inset = 0.05, ou donnez des coordonnées x, y exactes. Pour un graphique vraiment encombré, supprimez la boîte (bty = "n") pour que la légende se lise au-dessus des données, ou placez-la en dehors du graphique avec xpd = TRUE.

Les échantillons n’accordent pas le graphique. legend() ne lit pas votre appel à plot() — vous redéclarez col, pch, lty et fill vous-même, et ils doivent être dans le même ordre que celui où vous avez tracé les séries. Si « Curved » ressort en bleu, c’est que vos étiquettes legend et votre vecteur col sont mal ordonnés. Définissez les couleurs une fois dans un vecteur et réutilisez-le à la fois pour le graphique et la légende.

Questions fréquentes

Appelez legend() après plot(). Donnez-lui une position (un mot-clé comme "topright" ou des coordonnées x, y), les étiquettes dans legend=, et les échantillons qui accordent votre graphique — col avec pch (points) ou lty (lignes), ou fill pour les barres et les boîtes. Elle dessine sur la figure courante.

Utilisez un mot-clé de position : "bottomright", "bottom", "bottomleft", "left", "topleft", "top", "topright", "right" ou "center". Pour un contrôle exact, passez x et y en coordonnées de données (le coin supérieur gauche de la légende y atterrit), et ajoutez inset pour la décaler du bord du graphique.

Mettez bty = "n" dans l’appel à legend(). Pour conserver la boîte mais restyliser sa bordure, utilisez plutôt box.lty (type de ligne), box.lwd (largeur) et box.col (couleur).

boxplot() et barplot() n’en ajoutent pas automatiquement. Colorez les boîtes/barres avec un vecteur col, puis appelez legend() avec fill réglé sur les mêmes couleurs dans le même ordre pour que les échantillons accordent. Utilisez fill (non pch/lty) car le graphique montre des aires remplies.

Passez title = "..." à legend(). Stylisez-le ainsi que les étiquettes avec text.font (1 normal, 2 gras, 3 italique, 4 gras-italique) et donnez un arrière-plan à la boîte avec bg.

Testez vos connaissances

Le graphique ci-dessous trace deux lignes mais n’a pas de légende. Ajoutez un appel à legend() en haut à gauche qui les étiquette "Group A" et "Group B", accorde les couleurs et les types de lignes, et n’affiche aucune boîte.

Utilisez legend("topleft", ...). Le graphique trace des lignes (pas de points), donc passez lty mais pas pch, et ajoutez bty = "n" pour supprimer la boîte.

legend("topleft",
       legend = c("Group A", "Group B"),
       col = c("#3a86d4", "#e07b39"),
       lty = c(1, 2),
       bty = "n")

Les vecteurs col et lty sont dans le même ordre que les étiquettes, donc la légende accorde les lignes.

Vérification rapide. Votre graphique trace des barres remplies par groupe. Quel argument de legend() doit définir les échantillons de couleur ?

fill. Utilisez fill pour les graphiques à aires remplies (barres, boîtes) ; utilisez col avec pch ou lty pour les points et les lignes.

Conclusion

legend() est la seule fonction dont vous avez besoin pour étiqueter un graphique R de base. Positionnez-la par mot-clé ou par x, y, redéclarez col/pch/lty/fill dans le même ordre que vos séries, et ajustez le titre et la boîte. Pour les graphiques remplis comme boxplot() et barplot(), colorez par groupe et utilisez fill pour que la légende accorde.

Leçons connexes

Cette page vous a-t-elle été utile ?

Prouvez que vous savez le faire. Maîtrisez toute la série R Base Graphics — 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 : chaque figure a été produite par le code montré, 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 Run. The runtime is the judge.

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Ajouter une légende en R : la fonction legend()},
  date = {2026-06-27},
  url = {https://www.datanovia.com/learn/data-visualization/r-base/add-legend},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Ajouter une légende en R : la fonction legend().” 2026. June 27. https://www.datanovia.com/learn/data-visualization/r-base/add-legend.