Tracer plusieurs courbes en R avec ggplot2

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.

Date de publication

27 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Deux façons de dessiner plusieurs lignes : un geom_line() par colonne (données au format large) ou un geom_line() associé à un groupe (données au format long).
  • Les données au format long passent à l’échelle : associez la colonne de regroupement à color (et éventuellement à linetype) à l’intérieur de aes(), et vous obtenez une ligne par groupe plus une légende automatiquement.
  • Remodelez large → long en R de base par empilement avec data.frame() — sans paquet supplémentaire.
  • Stylisez chaque groupe avec scale_color_viridis_d() (adaptée au daltonisme) ou une palette manuelle.
  • Ajoutez geom_point() pour marquer les observations ; chaque graphique ci-dessous est affiché pour vous, puis modifiable en direct.
Obtenez le livre — GGPlot2 Essentials (PDF)

Introduction

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 :

  • Données au format large (une colonne par série) → ajoutez une couche geom_line() par colonne.
  • Données au format long (une colonne de groupe + une colonne de valeurs) → un seul 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.

D’abord une seule ligne

Commencez par une seule ligne pour que les éléments soient clairs : associez date à x, psavert à y, ajoutez geom_line().

library(ggplot2)
ggplot(economics, aes(x = date, y = psavert)) +
  geom_line(color = "#3a86d4", linewidth = 0.8) +
  theme_minimal()

ggplot2 line chart of the US personal savings rate (psavert) over time, drawn as a single azure line.

Plusieurs lignes à partir de données au format large

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()).

library(ggplot2)
ggplot(economics, aes(x = date)) +
  geom_line(aes(y = psavert), color = "#d1495b", linewidth = 0.8) +
  geom_line(aes(y = uempmed), color = "#3a86d4", linewidth = 0.8, linetype = "twodash") +
  labs(y = "Value") +
  theme_minimal()

ggplot2 chart with two lines over a shared date axis: a red savings-rate line and a blue dashed unemployment-duration line.

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.

Remodeler large → long (R de base)

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 :

library(ggplot2)
df <- data.frame(
  date     = rep(economics$date, 2),
  variable = rep(c("psavert", "uempmed"), each = nrow(economics)),
  value    = c(economics$psavert, economics$uempmed)
)
head(df)
        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.

Plusieurs lignes à partir de données au format long

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()

ggplot2 line chart with two colour-coded lines, savings rate and unemployment duration, distinguished by a legend.

Le même code gérerait dix séries — seules les données changent, jamais l’appel au graphique.

Couleur et type de ligne par groupe

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()

ggplot2 chart with two lines differentiated by both colour and line type — one solid, one dashed — with a combined legend.

Comme color et linetype sont associés à la même variable avec la même étiquette, ggplot2 les fusionne en une seule légende.

Ajouter des points aux lignes

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()

ggplot2 chart of two coloured lines with points marking each observation, over a short date range.

Essayez en direct

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.

🟢 Avec un agent IA

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 →

Problèmes courants

  • Une seule ligne apparaît (un zigzag connecté). Vous avez dessiné des données au format long mais oublié d’associer le groupe. Sans 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().
  • Aucune légende n’apparaît. Une couleur définie en dehors de 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().
  • Les lignes semblent en dents de scie / dans le mauvais ordre. 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é.

Questions fréquentes

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.

Testez vos connaissances

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.

# Map the group to color inside aes(), then add scale_color_viridis_d()
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()
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.

Conclusion

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.

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 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.

Réutilisation

Citation

BibTeX
@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}
}
Veuillez citer ce travail comme suit :
“Tracer plusieurs courbes en R avec ggplot2.” 2026. June 27. https://www.datanovia.com/learn/data-visualization/ggplot2/multiple-lines.