Graphique en courbes avec R : le guide ggplot2

Tracez, groupez et chronologisez un graphique en courbes ggplot2 — en direct dans votre navigateur

Apprenez à construire un graphique en courbes avec R et ggplot2 — reliez des points ordonnés avec geom_line(), ajoutez des points, changez le type et la couleur de ligne, tracez plusieurs groupes et affichez une série temporelle avec des dates en abscisse. Modifiez et exécutez le code en direct, sans aucune installation.

Date de publication

20 juin 2026

Modifié

8 juillet 2026

AstucePoints clés
  • Un graphique en courbes relie des points de données ordonnés pour montrer comment une valeur évolue — au fil du temps, ou le long d’une catégorie ordonnée.
  • Dans ggplot2, vous associez une variable ordonnée à x et les valeurs à y, puis vous tracez avec geom_line().
  • Pour une série unique issue d’un seul groupe, définissez group = 1 afin que ggplot2 sache que les points forment une seule ligne.
  • Superposez geom_point() sur geom_line() pour marquer chaque observation.
  • Contrôlez la ligne avec linetype (par exemple "dashed"), colour et linewidth.
  • Tracez plusieurs groupes en associant la variable de regroupement à colour (et/ou linetype) ; utilisez une palette adaptée au daltonisme scale_colour_viridis_d().
  • Pour une série temporelle, placez une colonne Date sur x — ggplot2 met l’axe à l’échelle automatiquement.
  • Chaque graphique ci-dessous est généré pour vous — modifiez ensuite n’importe quel exemple en direct dans le bac à sable.
Obtenez le livre — GGPlot2 Essentials (PDF)

Introduction

Un graphique en courbes (ou courbe) est le moyen le plus rapide de montrer comment une valeur évolue le long d’une dimension ordonnée — le plus souvent le temps. En R, ggplot2 en trace un avec une seule couche — geom_line() — et facilite l’ajout de points, le changement de style de ligne, le tracé de plusieurs séries à la fois et l’affichage de dates en abscisse. Cette leçon en construit un pas à pas ; les figures sont générées ici même, et vous pouvez réexécuter ou modifier chacune d’elles en direct.

Nous utilisons deux jeux de données intégrés. economics est une série temporelle économique mensuelle des États-Unis — nous traçons le taux d’épargne personnelle (psavert) et des mesures de durée du chômage par rapport à la colonne date. ToothGrowth enregistre la longueur des cellules odontoblastes (len) chez des cobayes recevant de la vitamine C à trois doses (dose : 0.5, 1 ou 2 mg/jour) selon deux modes d’administration (supp : jus d’orange OJ ou acide ascorbique VC) — nous le résumons à une moyenne de groupe par dose pour tracer une ligne catégorielle.

Construire un graphique en courbes de base

Associez une variable ordonnée à x et les valeurs à y, puis ajoutez une seule couche de ligne. Lorsque tous les points appartiennent à une série, définissez group = 1 pour que ggplot2 les relie en une seule ligne plutôt que de ne rien tracer.

library(ggplot2)
# mean tooth length per dose, computed in-block with base aggregate()
tg_mean <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
ggplot(tg_mean, aes(x = factor(dose), y = len, group = 1)) +
  geom_line(colour = "#3a86d4", linewidth = 1) +
  labs(x = "Dose (mg/day)", y = "Mean tooth length") +
  theme_minimal()

ggplot2 line plot of mean tooth length against vitamin C dose; the line rises from 0.5 to 2 mg/day.

Ajouter des points à la ligne

Une ligne nue masque l’emplacement réel des observations. Superposez geom_point() sur geom_line() pour marquer chaque point de données — une valeur par défaut courante et lisible pour les petites séries.

library(ggplot2)
tg_mean <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
ggplot(tg_mean, aes(x = factor(dose), y = len, group = 1)) +
  geom_line(colour = "#3a86d4", linewidth = 1) +
  geom_point(colour = "#3a86d4", size = 3) +
  labs(x = "Dose (mg/day)", y = "Mean tooth length") +
  theme_minimal()

ggplot2 line plot of mean tooth length by dose with a point marking each of the three observations on the line.

Changer le type et la couleur de ligne

Définissez linetype pour une ligne "dashed", "dotted" ou "longdash", et colour pour n’importe quelle couleur. Ce sont ici des attributs esthétiques fixes, ils vont donc à l’extérieur d’aes() (une constante, pas une association).

library(ggplot2)
tg_mean <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
ggplot(tg_mean, aes(x = factor(dose), y = len, group = 1)) +
  geom_line(colour = "#3a86d4", linetype = "dashed", linewidth = 1) +
  geom_point(colour = "#3a86d4", size = 3) +
  labs(x = "Dose (mg/day)", y = "Mean tooth length") +
  theme_minimal()

ggplot2 line plot of mean tooth length by dose drawn with a dashed brand-azure line and round points.

Tracer plusieurs groupes

Pour tracer une ligne par groupe, associez la variable de regroupement à colour (et éventuellement linetype pour un second repère adapté à l’impression). ggplot2 divise les données et trace une ligne pour chaque niveau. Utilisez une palette adaptée au daltonisme comme viridis afin que la figure reste lisible pour tout le monde.

library(ggplot2)
# mean length per dose AND supplement, in-block with base aggregate()
tg_grp <- aggregate(len ~ dose + supp, data = ToothGrowth, FUN = mean)
ggplot(tg_grp, aes(x = factor(dose), y = len, colour = supp,
                   linetype = supp, group = supp)) +
  geom_line(linewidth = 1) +
  geom_point(size = 3) +
  scale_colour_viridis_d() +
  labs(x = "Dose (mg/day)", y = "Mean tooth length",
       colour = "Supplement", linetype = "Supplement") +
  theme_minimal()

ggplot2 line plot of mean tooth length by dose with two colourblind-safe lines, one per supplement (OJ and VC).

geom_line ou geom_path ou geom_step

geom_line() relie les points dans l’ordre de la valeur x. geom_path() les relie dans l’ordre où ils apparaissent dans les données (utile lorsque le chemin lui-même compte). geom_step() trace un escalier, maintenant chaque valeur jusqu’au x suivant — le bon choix pour une série qui change par sauts discrets.

library(ggplot2)
tg_mean <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
ggplot(tg_mean, aes(x = factor(dose), y = len, group = 1)) +
  geom_step(colour = "#3a86d4", linewidth = 1) +
  geom_point(colour = "#3a86d4", size = 3) +
  labs(x = "Dose (mg/day)", y = "Mean tooth length") +
  theme_minimal()

ggplot2 stairstep plot of mean tooth length by dose drawn with geom_step, holding each value until the next dose.

x numérique : continu vs catégoriel

Lorsque x est un nombre, ggplot2 le traite comme un axe continu et espace les points selon leur valeur. Enveloppez-le dans factor() pour obtenir un axe catégoriel avec une graduation uniformément espacée par niveau. Les deux sont valides — choisissez celui qui correspond à vos données. Ici, dose tracée comme un nombre continu conserve l’espacement réel (0.5, 1, 2) :

library(ggplot2)
tg_mean <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
ggplot(tg_mean, aes(x = dose, y = len)) +
  geom_line(colour = "#3a86d4", linewidth = 1) +
  geom_point(colour = "#3a86d4", size = 3) +
  labs(x = "Dose (mg/day)", y = "Mean tooth length") +
  theme_minimal()

ggplot2 line plot of mean tooth length against dose on a continuous numeric x-axis, so the gap to dose 2 is wider.

Série temporelle : des dates en abscisse

Pour une série temporelle, placez une colonne Date sur x et ggplot2 met l’axe à l’échelle avec des intervalles de dates pertinents automatiquement — aucune conversion manuelle nécessaire. Nous utilisons les données intégrées economics (indicateurs mensuels des États-Unis) et traçons le taux d’épargne personnelle au fil du temps.

library(ggplot2)
ggplot(economics, aes(x = date, y = psavert)) +
  geom_line(colour = "#3a86d4", linewidth = 0.8) +
  labs(x = "Date", y = "Personal savings rate (%)") +
  theme_minimal()

ggplot2 time-series line plot of the US personal savings rate from the 1960s to the 2010s, trending down then up.

Plusieurs séries temporelles

Pour superposer plusieurs séries, réorganisez les données pour que chacune ait une étiquette et associez cette étiquette à colour. Ici, nous traçons la durée médiane et moyenne du chômage ensemble à partir d’economics, en empilant les deux colonnes en un seul tableau de données long avec la fonction de base rbind() afin qu’une seule couche geom_line() trace les deux.

library(ggplot2)
# stack two measures into one long frame, in-block with base rbind()
econ_long <- rbind(
  data.frame(date = economics$date, weeks = economics$uempmed,  series = "Median"),
  data.frame(date = economics$date, weeks = economics$unemploy / 1000, series = "Unemployed (thousands)")
)
ggplot(econ_long, aes(x = date, y = weeks, colour = series)) +
  geom_line(linewidth = 0.8) +
  scale_colour_viridis_d(end = 0.85) +
  labs(x = "Date", y = "Value", colour = "Series") +
  theme_minimal()

ggplot2 plot with two colourblind-safe time-series lines comparing median and mean unemployment duration over time.

Associer la largeur de ligne à une variable

linewidth peut être une constante fixe (à l’extérieur d’aes()) ou associée à une variable à l’intérieur d’aes() afin que la ligne s’épaississe avec une troisième quantité. L’associer ajoute une légende ; la définir comme constante stylise simplement la ligne. Ici, nous définissons une ligne plus épaisse constante pour la mise en valeur :

library(ggplot2)
tg_mean <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
ggplot(tg_mean, aes(x = factor(dose), y = len, group = 1)) +
  geom_line(colour = "#3a86d4", linewidth = 2) +
  geom_point(colour = "#3a86d4", size = 3) +
  labs(x = "Dose (mg/day)", y = "Mean tooth length") +
  theme_minimal()

ggplot2 line plot of mean tooth length by dose drawn with a thick brand-azure line to emphasise the trend.

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 de graphique en courbes avec matplotlib arrive dans la série Python.

🟢 Avec un agent IA

Demandez à Prova « pourquoi mon geom_line() à série unique ne trace-t-il aucune ligne tant que je n’ajoute pas group = 1 ? » — 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

Avec un seul groupe, ggplot2 ne sait pas que les points appartiennent à la même ligne, il ne trace donc rien. Définissez group = 1 à l’intérieur d’aes() — par exemple aes(x = factor(dose), y = len, group = 1) — pour les relier en une seule ligne.

Superposez geom_point() sur geom_line() dans le même graphique — par exemple, ajoutez + geom_point(size = 3). Chaque observation reçoit alors un marqueur sur la ligne.

Définissez linetype à l’intérieur de geom_line() sur "dashed", "dotted" ou "longdash". Comme il s’agit d’un style fixe et non d’une association de données, placez-le à l’extérieur d’aes(), par exemple geom_line(linetype = "dashed").

geom_line() relie les points dans l’ordre de la valeur x, geom_path() les relie dans l’ordre où ils apparaissent dans les données, et geom_step() trace un escalier qui maintient chaque valeur jusqu’au x suivant. Utilisez geom_step() pour les séries qui changent par sauts discrets.

Placez une colonne Date sur x (par exemple aes(x = date, y = psavert)) et ggplot2 met l’axe à l’échelle avec des intervalles de dates pertinents automatiquement — aucune conversion manuelle nécessaire.

Testez vos connaissances

Complétez le code pour que la ligne affiche aussi un point à chaque observation.

# Add geom_point(), e.g. geom_point(size = 3)
library(ggplot2) tg_mean <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean) ggplot(tg_mean, aes(x = factor(dose), y = len, group = 1)) + geom_line(colour = "#3a86d4", linewidth = 1) + geom_point(size = 3)
library(ggplot2)
tg_mean <- aggregate(len ~ dose, data = ToothGrowth, FUN = mean)
ggplot(tg_mean, aes(x = factor(dose), y = len, group = 1)) +
  geom_line(colour = "#3a86d4", linewidth = 1) +
  geom_point(size = 3)

Conclusion

Vous avez construit un graphique en courbes ggplot2, ajouté des points, changé le type et la couleur de ligne, tracé plusieurs groupes avec une palette adaptée au daltonisme, dessiné un escalier avec geom_step(), géré les axes x numériques vs catégoriels, et affiché des séries temporelles uniques et multiples avec des dates en abscisse. Ensuite, explorez le nuage de points pour les relations entre deux variables numériques.

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

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Graphique en courbes avec R : le guide ggplot2},
  date = {2026-06-20},
  url = {https://www.datanovia.com/learn/data-visualization/ggplot2/line-plot},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Graphique en courbes avec R : le guide ggplot2.” 2026. June 20. https://www.datanovia.com/learn/data-visualization/ggplot2/line-plot.