Nuage de points en R : la fonction plot()

Tracez plot(x, y), stylisez les points, colorez par groupe et ajoutez une courbe de tendance en R base

Créez un nuage de points en R base avec plot(x, y). Définissez la forme, la couleur et la taille des points avec pch, col et cex, ajoutez un titre et des étiquettes d’axes, colorez les points par groupe, ajoutez une droite de régression avec abline(lm()) et un lissage lowess, étiquetez les points avec text() et changez le type de graphique.

Date de publication

27 juin 2026

Modifié

8 juillet 2026

AstucePoints clés
  • Un nuage de points en R base tient en un seul appel : plot(x, y) — aucun package requis.
  • Stylisez les points avec pch (forme), col (couleur) et cex (taille) ; ajoutez un titre avec main et des étiquettes d’axes avec xlab/ylab.
  • Colorez les points par groupe en indexant un vecteur de couleurs avec un facteur : col = palette[group].
  • Ajoutez une droite de régression avec abline(lm(y ~ x)), ou un lissage avec lines(lowess(x, y)).
  • Étiquetez les points avec text(), et changez l’aspect avec type ("p" points, "l" ligne, "b" les deux).

Introduction

Vous avez deux variables numériques et vous voulez voir comment elles évoluent ensemble — la consommation de carburant baisse-t-elle quand une voiture devient plus lourde ? Un nuage de points répond à cette question, et en R base c’est une seule fonction : plot(x, y). Vous passez les vecteurs x et y, et R dessine un point par observation.

Tout le reste — la forme des points, la couleur, un titre, une courbe de tendance — est un argument ou une ligne supplémentaire ajoutée par-dessus. Cette leçon couvre le graphique de base, le style des points (pch/col/cex), les titres et étiquettes, la coloration par groupe, l’ajout d’une droite de régression ou de lissage, l’étiquetage de points individuels, et les variantes de type.

Vous préférez la grammaire des graphiques ? ggplot2 construit le même graphique avec des légendes et des thèmes automatiques — voir nuage de points dans la série ggplot2.

Un nuage de points de base : plot(x, y)

Passez les deux variables à plot(). Nous utilisons le jeu de données intégré mtcars : le poids des voitures (wt) sur l’axe des x, les miles par gallon (mpg) sur l’axe des y. La relation est nettement décroissante — les voitures plus lourdes consomment plus de carburant.

plot(mtcars$wt, mtcars$mpg)

A base R scatter plot of car weight on the x axis against miles per gallon on the y axis, showing a downward trend with default open circle points.

Voilà le graphique entier. plot(x, y) lit le premier argument comme x et le second comme y. Les points par défaut sont des cercles ouverts et les étiquettes d’axes reprennent les expressions que vous avez passées.

Forme, couleur et taille des points : pch, col, cex

Trois arguments stylisent les marqueurs : pch définit la forme, col la couleur, et cex la taille (un multiplicateur, donc cex = 1.5 est 50 % plus grand). Ici nous utilisons des points pleins (pch = 19) dans l’azur de la marque, légèrement agrandis.

plot(mtcars$wt, mtcars$mpg,
     pch = 19, col = "#3a86d4", cex = 1.2)

A base R scatter plot of car weight against miles per gallon with solid azure dots, sized slightly larger than the default.

pch prend un nombre de 0 à 25. Les plus courants : 19 cercle plein, 21 cercle rempli avec bordure, 17 triangle plein, 15 carré plein, 1 cercle ouvert (le défaut), 3 un plus. Les formes 2125 sont remplissables — elles prennent une bordure col et un remplissage bg :

plot(0:25, rep(1, 26), pch = 0:25, cex = 2,
     col = "#3a86d4", bg = "#f4a259",
     xlab = "pch value", ylab = "", yaxt = "n", frame = FALSE)
text(0:25, 0.8, labels = 0:25, cex = 0.7)

A reference strip showing base R plotting symbols 0 through 25 with their pch numbers below each symbol.

Ne passez bg que lorsque vous utilisez une forme remplissable (2125) ; pour les autres, col définit la couleur du symbole.

Titres et étiquettes d’axes

main ajoute un titre au graphique, xlab et ylab renomment les axes. Définissez frame = FALSE pour supprimer la boîte autour de la zone de tracé et obtenir un rendu plus épuré.

plot(mtcars$wt, mtcars$mpg,
     main = "Fuel economy vs. weight",
     xlab = "Weight (1000 lbs)", ylab = "Miles per gallon",
     pch = 19, col = "#3a86d4", frame = FALSE)

A base R scatter plot of car weight against miles per gallon with a main title and descriptive axis labels, drawn without a surrounding frame.

Utilisez de vraies unités dans xlab/ylab plutôt que le nom brut de la variable — le lecteur ne devrait pas avoir à savoir que wt signifie des milliers de livres.

Colorer les points par groupe

Pour colorer les points selon une variable catégorielle, construisez un vecteur de couleurs et indexez-le avec le facteur de regroupement. Chaque niveau choisit sa couleur par position. Ici nous colorons selon le nombre de cylindres (4, 6, 8), puis ajoutons une légende pour que le lecteur puisse décoder les couleurs.

grp      <- factor(mtcars$cyl)                       # 4, 6, 8 as a factor
grp_cols <- c("#3a86d4", "#f4a259", "#5fad56")        # colourblind-safe set

plot(mtcars$wt, mtcars$mpg,
     pch = 19, col = grp_cols[grp],
     xlab = "Weight (1000 lbs)", ylab = "Miles per gallon",
     frame = FALSE)

legend("topright", title = "Cylinders",
       legend = levels(grp), col = grp_cols, pch = 19)

A base R scatter plot of weight against miles per gallon with points coloured by cylinder count in three colourblind-safe colours, and a top-right legend labelling 4, 6 and 8 cylinders.

grp_cols[grp] est la ligne clé : indexer le vecteur à trois couleurs par le facteur renvoie une couleur par point, dans l’ordre des lignes. Les pastilles de la legend réutilisent les mêmes grp_cols dans le même ordre, donc la légende correspond. Voir Ajouter une légende pour en savoir plus sur le placement et le style de la légende.

Ajouter une droite de régression : abline(lm())

Pour montrer la tendance, ajustez un modèle linéaire avec lm(y ~ x) et passez-le à abline(), qui trace la droite ajustée à travers le graphique. Appelez-la après plot() pour qu’elle se pose sur la figure courante.

plot(mtcars$wt, mtcars$mpg,
     pch = 19, col = "#3a86d4",
     xlab = "Weight (1000 lbs)", ylab = "Miles per gallon",
     frame = FALSE)

abline(lm(mpg ~ wt, data = mtcars), col = "#e63946", lwd = 2)

A base R scatter plot of weight against miles per gallon with a straight fitted regression line drawn through the azure points.

Notez l’ordre de la formule : lm(mpg ~ wt) se lit « mpg modélisé par wt », donc y vient en premier. lwd épaissit la droite ; lty = 2 la rendrait en pointillés.

Ajouter une courbe de lissage : lowess()

Quand la relation n’est peut-être pas une droite, un lissage lowess suit la forme locale des données. Calculez-le avec lowess(x, y) et tracez-le avec lines().

plot(mtcars$wt, mtcars$mpg,
     pch = 19, col = "#3a86d4",
     xlab = "Weight (1000 lbs)", ylab = "Miles per gallon",
     frame = FALSE)

lines(lowess(mtcars$wt, mtcars$mpg), col = "#e63946", lwd = 2)

A base R scatter plot of weight against miles per gallon with a gently curved lowess smoothing line tracing the downward trend.

Le lissage se courbe là où les données se courbent — utile comme vérification rapide de la courbure avant de vous engager dans un ajustement en ligne droite.

Étiqueter les points avec text()

Pour annoter des points individuels, appelez text() avec les mêmes coordonnées et un vecteur d’étiquettes. Utilisez pos pour décaler le texte par rapport au point (3 = au-dessus). Ici nous étiquetons par leur nom quelques voitures gourmandes.

plot(mtcars$wt, mtcars$mpg,
     pch = 19, col = "#3a86d4",
     xlab = "Weight (1000 lbs)", ylab = "Miles per gallon",
     frame = FALSE)

# Label only the three heaviest cars to avoid clutter
heavy <- mtcars[mtcars$wt > 5, ]
text(heavy$wt, heavy$mpg, labels = rownames(heavy),
     pos = 3, cex = 0.7, col = "#264653")

A base R scatter plot of weight against miles per gallon where the three heaviest cars are labelled with their model names above the points.

Étiqueter chaque point se transforme généralement en bruit qui se chevauche — choisissez les quelques-uns qui comptent (extrêmes, valeurs aberrantes, un cas que vous voulez signaler). Pour étiqueter les points de façon interactive, exécutez identify(x, y, labels) dans une session R en direct et cliquez sur les points (cela nécessite un véritable périphérique graphique, donc cela ne se déclenche pas sur cette page rendue).

Variantes de type de graphique : p, l, b

L’argument type change la façon dont les données sont dessinées. "p" (le défaut) ce sont des points, "l" les relie par une ligne, et "b" montre les deux. Les lignes ont du sens quand x est ordonné — ici nous trions d’abord une petite série.

op <- par(mfrow = c(1, 3))
df <- mtcars[order(mtcars$wt), ]   # order by x so a line reads left to right

plot(df$wt, df$mpg, type = "p", main = 'type = "p"',
     pch = 19, col = "#3a86d4", xlab = "wt", ylab = "mpg", frame = FALSE)
plot(df$wt, df$mpg, type = "l", main = 'type = "l"',
     col = "#3a86d4", xlab = "wt", ylab = "mpg", frame = FALSE)
plot(df$wt, df$mpg, type = "b", main = 'type = "b"',
     pch = 19, col = "#3a86d4", xlab = "wt", ylab = "mpg", frame = FALSE)

Three side-by-side base R plots of the same ordered series drawn with type p as points, type l as a connected line, and type b as points joined by a line.

par(op)

Pour un nuage de points, gardez type = "p". N’utilisez "l" ou "b" que lorsque les points forment une séquence ordonnée (temps, un indice trié) — une ligne reliant des valeurs x non ordonnées est trompeuse.

Plus de deux variables ? Pour examiner toutes les paires à la fois, pairs(mtcars[, c("wt", "mpg", "hp")]) dessine une matrice de nuages de points — un panneau par paire de variables.

Essayez en direct

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

🟢 Avec un agent IA

Demandez à Prova « comment ajouter une droite de régression à mon nuage de points en R base ? » — elle répond avec du code R base que vous pouvez exécuter, donc la correction est reproductible. The runtime is the judge. Demander à Prova →

Problèmes courants

La droite de régression n’apparaît pas. abline() dessine sur le graphique courant, elle doit donc venir après plot() dans le même bloc — et le modèle doit ajuster une seule droite. abline(lm(mpg ~ wt)) fonctionne ; abline(lm(mpg ~ wt + hp)) a deux pentes et ne se dessinera pas. Ajustez lm(y ~ x) avec un seul prédicteur pour une tendance de nuage de points en ligne droite.

Les couleurs de groupe sortent fausses. col = grp_cols[grp] ne fonctionne que lorsque grp est un facteur — indexer par un vecteur numérique ou caractère ne correspond pas aux niveaux. Enveloppez d’abord la variable de regroupement dans factor(), et faites en sorte que grp_cols soit au moins aussi long que le nombre de niveaux.

Questions fréquentes

Appelez plot(x, y) avec vos deux vecteurs numériques — par exemple plot(mtcars$wt, mtcars$mpg). Cela dessine un point par observation. Ajoutez pch, col et cex pour styliser les points et main/xlab/ylab pour les titres. Aucun package n’est requis.

Ajustez un modèle et passez-le à abline() : abline(lm(y ~ x, data = df)). Appelez-la après plot() pour qu’elle se pose sur la figure courante. Pour une tendance non linéaire, utilisez plutôt lines(lowess(x, y)).

Créez un vecteur de couleurs et indexez-le avec un facteur : col = grp_cols[factor(group)]. Chaque niveau choisit sa couleur par position, renvoyant une couleur par point. Ajoutez une legend() réutilisant les mêmes couleurs dans le même ordre pour que la légende corresponde.

Définissez pch sur un nombre de 0 à 25 — 19 est un cercle plein, 17 un triangle, 15 un carré, 1 le cercle ouvert par défaut. Les formes 2125 sont remplissables : donnez-leur une bordure col et un remplissage bg.

Appelez text(x, y, labels = ...) après plot(), en utilisant pos pour décaler le texte par rapport au point. N’étiquetez que les quelques points qui comptent — les étiqueter tous se transforme en bruit qui se chevauche. Pour une sélection interactive, utilisez identify(x, y, labels) dans une session R en direct.

Testez vos connaissances

À partir d’iris, dessinez un nuage de points de Sepal.Length (x) en fonction de Petal.Length (y) avec des points azurés pleins, de vraies étiquettes d’axes, sans cadre, et une droite de régression rouge par-dessus.

Utilisez plot(iris$Sepal.Length, iris$Petal.Length, pch = 19, col = "#3a86d4", frame = FALSE, ...), puis abline(lm(Petal.Length ~ Sepal.Length, data = iris), col = "#e63946"). Rappelez-vous que y vient en premier dans la formule lm().

plot(iris$Sepal.Length, iris$Petal.Length,
     pch = 19, col = "#3a86d4",
     xlab = "Sepal length (cm)", ylab = "Petal length (cm)",
     frame = FALSE)

abline(lm(Petal.Length ~ Sepal.Length, data = iris),
       col = "#e63946", lwd = 2)

La formule lm() est y ~ x (Petal.Length ~ Sepal.Length), et abline() dessine l’ajustement sur le graphique courant.

Vérification rapide. Vous voulez colorer les points par un groupe à trois niveaux. Que doit être la variable de regroupement pour que col = grp_cols[group] fonctionne ?

Un facteur. grp_cols[factor(group)] indexe le vecteur de couleurs par position de niveau, renvoyant une couleur par point. Indexer par un vecteur numérique ou caractère brut ne correspond pas aux niveaux.

Conclusion

Un nuage de points en R base commence par plot(x, y) et s’enrichit par couches : pch/col/cex pour les points, main/xlab/ylab pour les étiquettes, un vecteur-de-couleurs-par-facteur pour les groupes, et abline(lm()) ou lowess() pour la tendance. Annotez les points qui comptent avec text(), et gardez type = "p" sauf si votre x est ordonné.

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

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Nuage de points en R : la fonction plot()},
  date = {2026-06-27},
  url = {https://www.datanovia.com/learn/data-visualization/r-base/scatter-plot},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Nuage de points en R : la fonction plot().” 2026. June 27. https://www.datanovia.com/learn/data-visualization/r-base/scatter-plot.