library(ggplot2)
ggplot(economics, aes(x = date, y = psavert)) +
geom_line(color = "#3a86d4", linewidth = 0.8) +
theme_minimal()
Dessinez plusieurs lignes sur un même graphique — une ligne par groupe, en direct dans votre navigateur
Tracez plusieurs courbes en R avec ggplot2 — une ligne par groupe à partir de données au format long, ou plusieurs couches geom_line() à partir de colonnes au format large. Définissez la couleur et le type de ligne par groupe, corrigez la légende et ajoutez des points. Modifiez et exécutez le code en direct, sans installation.
27 juin 2026
7 juillet 2026
geom_line() par colonne (données au format large) ou un geom_line() associé à un groupe (données au format long).color (et éventuellement à linetype) à l’intérieur de aes(), et vous obtenez une ligne par groupe plus une légende automatiquement.data.frame() — sans paquet supplémentaire.scale_color_viridis_d() (adaptée au daltonisme) ou une palette manuelle.geom_point() pour marquer les observations ; chaque graphique ci-dessous est affiché pour vous, puis modifiable en direct.Une seule ligne montre une tendance ; la plupart des graphiques réels en comparent plusieurs — épargne contre chômage, contrôle contre traitement, une courbe par pays. Dans ggplot2, il existe deux façons claires de placer plusieurs lignes sur le même graphique, et celle que vous utilisez dépend de la forme de vos données :
geom_line() par colonne.geom_line() associé au groupe.La voie des données au format long est celle qui passe à l’échelle — deux lignes ou vingt, le code est identique. Nous utilisons la série temporelle intégrée economics : le taux d’épargne personnelle des États-Unis (psavert) et la durée médiane du chômage (uempmed) sur la même date.
Commencez par une seule ligne pour que les éléments soient clairs : associez date à x, psavert à y, ajoutez geom_line().
Les données economics sont au format large : psavert et uempmed sont des colonnes distinctes. Pour tracer les deux, ajoutez un geom_line() par colonne et donnez à chacune sa propre couleur dans l’appel (une couleur fixe, donc placée en dehors de aes()).

Cela fonctionne, mais a deux inconvénients : il n’y a aucune légende (une couleur fixe définie en dehors de aes() n’est pas une association, donc ggplot2 n’a rien à étiqueter), et vous répétez un geom_line() pour chaque série. Acceptable pour deux colonnes — fastidieux et sans légende pour de nombreuses séries.
La voie qui passe à l’échelle empile les colonnes de valeurs en une seule colonne de valeurs plus une étiquette variable. Faites-le en R de base — sans tidyr/dplyr — en construisant un data.frame qui répète date et empile les valeurs :
date variable value
1 1967-07-01 psavert 12.6
2 1967-08-01 psavert 12.6
3 1967-09-01 psavert 11.9
4 1967-10-01 psavert 12.9
5 1967-11-01 psavert 12.8
6 1967-12-01 psavert 11.8
Désormais, variable marque chaque ligne, de sorte qu’un seul geom_line() peut diviser les données en une ligne par groupe.
Associez variable à color à l’intérieur de aes(). ggplot2 dessine une ligne par groupe et ajoute la légende gratuitement.
library(ggplot2)
df <- data.frame(
date = rep(economics$date, 2),
variable = rep(c("psavert", "uempmed"), each = nrow(economics)),
value = c(economics$psavert, economics$uempmed)
)
ggplot(df, aes(x = date, y = value, color = variable)) +
geom_line(linewidth = 0.8) +
scale_color_viridis_d() +
labs(color = "Series", y = "Value") +
theme_minimal()
Le même code gérerait dix séries — seules les données changent, jamais l’appel au graphique.
Associez une variable à la fois à color et à linetype pour que les lignes soient distinguables en niveaux de gris et pour les lecteurs daltoniens. Utilisez scale_color_manual() lorsque vous voulez des couleurs spécifiques.
library(ggplot2)
df <- data.frame(
date = rep(economics$date, 2),
variable = rep(c("psavert", "uempmed"), each = nrow(economics)),
value = c(economics$psavert, economics$uempmed)
)
ggplot(df, aes(x = date, y = value, color = variable, linetype = variable)) +
geom_line(linewidth = 0.8) +
scale_color_manual(values = c(psavert = "#d1495b", uempmed = "#3a86d4")) +
labs(color = "Series", linetype = "Series", y = "Value") +
theme_minimal()
Comme color et linetype sont associés à la même variable avec la même étiquette, ggplot2 les fusionne en une seule légende.
Superposez geom_point() par-dessus pour marquer chaque observation — utile lorsque les lignes sont clairsemées ou que vous voulez lire des valeurs individuelles. Ici, nous restreignons à quelques années pour que les points restent lisibles.
library(ggplot2)
recent <- economics[economics$date >= as.Date("2010-01-01"), ]
df <- data.frame(
date = rep(recent$date, 2),
variable = rep(c("psavert", "uempmed"), each = nrow(recent)),
value = c(recent$psavert, recent$uempmed)
)
ggplot(df, aes(x = date, y = value, color = variable)) +
geom_line(linewidth = 0.8) +
geom_point(size = 1.5) +
scale_color_viridis_d() +
labs(color = "Series", y = "Value") +
theme_minimal()
Les graphiques ci-dessus ont été rendus lors de la génération du site. 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 du graphique en courbes avec matplotlib/seaborn arrive bientôt dans la série Python.
Demandez à Prova « comment ajouter une troisième ligne à ce graphique à partir d’une nouvelle colonne ? » — elle répond avec du code que vous pouvez exécuter, donc l’explication est reproductible. The runtime is the judge. Demander à Prova →
color = variable (ou group = variable), geom_line() connecte chaque ligne dans l’ordre, sautant d’une série à l’autre. Associez le groupe à l’intérieur de aes().aes() (par ex. geom_line(color = "red")) est un style fixe, pas une association, donc il n’y a rien à étiqueter. Pour obtenir une légende, associez une variable à color à l’intérieur de aes().geom_line() connecte les points dans l’ordre où ils apparaissent. Assurez-vous que votre variable x est triée (ou un véritable Date/numérique), pas un facteur non ordonné.Deux façons. À partir de données au format large (une colonne par série), ajoutez une couche geom_line() par colonne. À partir de données au format long (une colonne de groupe + une colonne de valeurs), utilisez un seul geom_line() et associez le groupe à color à l’intérieur de aes(), par ex. aes(x = date, y = value, color = variable). La voie des données au format long passe à l’échelle pour n’importe quel nombre de lignes sans changer le code du graphique.
Ajoutez une autre couche geom_line() avec sa propre association y : ggplot(economics, aes(x = date)) + geom_line(aes(y = psavert)) + geom_line(aes(y = uempmed)). Donnez à chacune une couleur fixe en dehors de aes(). Notez que cela ne produit aucune légende — pour cela, remodelez en données au format long et associez le groupe à color.
Le plus souvent, les données sont au format long mais le groupe n’est pas associé, donc geom_line() connecte chaque ligne en un seul zigzag. Ajoutez color = variable ou group = variable à l’intérieur de aes() pour que ggplot2 divise les données en une ligne par groupe.
Empilez les colonnes de valeurs en R de base : construisez un data.frame qui répète la colonne x et concatène les valeurs, par ex. data.frame(date = rep(economics$date, 2), variable = rep(c("psavert","uempmed"), each = nrow(economics)), value = c(economics$psavert, economics$uempmed)). Les fonctions reshape() et stack() de R de base fonctionnent aussi.
Associez la variable de regroupement à la fois à color et à linetype à l’intérieur de aes(), puis contrôlez les valeurs avec scale_color_manual(values = c(...)) et scale_linetype_manual(...). Comme les deux attributs esthétiques sont associés à la même variable avec la même étiquette, ggplot2 les fusionne en une seule légende.
Le data frame df est déjà au format long (date, variable, value). Complétez le code pour que chaque variable soit dessinée comme sa propre ligne colorée avec une palette adaptée au daltonisme.
library(ggplot2)
df <- data.frame(
date = rep(economics$date, 2),
variable = rep(c("psavert", "uempmed"), each = nrow(economics)),
value = c(economics$psavert, economics$uempmed)
)
ggplot(df, aes(x = date, y = value, color = variable)) +
geom_line() +
scale_color_viridis_d()
Vérification rapide. Vous avez des données au format large avec trois colonnes numériques à tracer comme trois lignes, et vous voulez une légende. Quelle est l’approche la plus propre ?
Remodelez au format long (une colonne de groupe + une colonne de valeurs) et utilisez un seul geom_line() avec le groupe associé à color. Trois couches geom_line() distinctes fonctionneraient mais ne donnent aucune légende et ne passent pas à l’échelle. Associer le groupe à l’intérieur de aes() est ce qui produit la légende.
Vous avez dessiné plusieurs lignes de deux façons — plusieurs couches geom_line() à partir de colonnes au format large, et un seul geom_line() associé à partir de données au format long — remodelé large → long en R de base, stylisé la couleur et le type de ligne par groupe, et ajouté des points. L’approche associée sur données au format long est celle à privilégier : elle passe à l’échelle pour n’importe quel nombre de séries et vous donne la légende gratuitement.
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.
Prouvez que vous savez le faire. Maîtrisez toute la série ggplot2 — suivez votre parcours, construisez des projets et obtenez un certificat.
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
✓ Vous êtes Pro — continuez. The runtime is the judge.
Prêt à passer à la vitesse supérieure ?
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.
Cette leçon est reproductible : les figures sont exécutées lors de la génération du site (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 = {Tracer plusieurs courbes en R avec ggplot2},
date = {2026-06-27},
url = {https://www.datanovia.com/learn/data-visualization/ggplot2/multiple-lines},
langid = {fr}
}