Tracez trois variables en 3D, colorez les points par groupe, faites pivoter la vue, ajoutez des lignes de chute et un plan de régression
Faites un nuage de points 3D en R avec le package scatterplot3d. Définissez la forme, la couleur et la taille des points, colorez les points par groupe, changez l’angle de vue, ajoutez des étiquettes d’axes et un titre, tracez des lignes de chute verticales, et superposez un plan de régression sur le nuage de points.
Date de publication
27 juin 2026
Modifié
7 juillet 2026
AstucePoints clés
Tracez un nuage de points 3D en R avec scatterplot3d::scatterplot3d() — passez une matrice ou un data frame à trois colonnes (x, y, z), ou une formule z ~ x + y.
Stylisez les points avec les arguments des graphiques de base : pch (forme), color, cex.symbols (taille), et angle pour faire pivoter la vue.
Colorez ou changez la forme des points par groupe en indexant un vecteur avec as.numeric(factor).
Ajoutez des lignes de chute verticales jusqu’au sol avec type = "h", et un plan de régression avec la fermeture s3d$plane3d(lm(...)).
scatterplot3d() renvoie des fonctions utilitaires (points3d, plane3d, xyz.convert) pour ajouter des points, des plans et des légendes à un graphique existant.
Introduction
Vous avez trois variables numériques — disons la longueur des sépales, la largeur des sépales et la longueur des pétales — et un nuage de points 2D plat ne peut en montrer que deux à la fois. Un nuage de points 3D trace les trois d’un coup : chaque point se situe dans un cube, et vous lisez sa position par rapport à trois axes.
En R, l’outil le plus simple pour cela est le package scatterplot3d. Il ne nécessite rien d’autre que R de base, trace un nuage 3D statique épuré, et vous laisse colorer les points par groupe, faire pivoter la vue, ajouter des lignes de chute jusqu’au sol, et superposer un plan de régression — le tout avec des arguments de graphiques de base que vous connaissez déjà. Cette leçon en construit un, d’un graphique de base vers une figure de régression annotée.
Installez-le une fois :
install.packages("scatterplot3d")
Pour un graphique 3D interactif et rotatif que vous pouvez faire tourner avec la souris, optez plutôt pour plotly (une leçon future). scatterplot3d trace une figure statique fixe et prête à publier — idéale pour un article ou un rapport.
Les données
Nous utiliserons le jeu de données intégré iris : 150 fleurs de trois espèces, chacune mesurée sur quatre variables. Nous prenons les trois premières colonnes comme x, y et z. C’est du R de base et autonome — copiez n’importe quel bloc et exécutez-le seul.
Les trois colonnes deviennent les trois axes : Sepal.Length (x), Sepal.Width (y) et Petal.Length (z). La quatrième variable, Species, nous servira à colorer les points par groupe.
La fonction scatterplot3d()
La fonction prend les coordonnées des points. L’appel le plus simple passe un data frame ou une matrice dont les trois premières colonnes sont x, y et z :
scatterplot3d(x, y =NULL, z =NULL)
y et z sont optionnels lorsque x porte déjà les trois coordonnées — soit comme une matrice/data frame à trois colonnes, soit comme une formule de la forme z ~ x + y.
Un nuage de points 3D de base
Donnez à scatterplot3d() les trois premières colonnes d’iris et il trace le nuage avec des valeurs par défaut sensées. L’argument angle fait pivoter la vue autour de l’axe vertical — utile lorsque des points se cachent les uns derrière les autres. C’est notre figure phare.
library(scatterplot3d)# Colour each point by its speciescolors <-c("#3a86d4", "#E69F00", "#56B4E9")point_cols <- colors[as.numeric(iris$Species)]scatterplot3d(iris[, 1:3], pch =16, color = point_cols, angle =55)
iris[, 1:3] fournit les trois coordonnées ; pch = 16 trace des points pleins ; color prend une couleur par point ; et angle = 55 incline la vue pour que les trois espèces se séparent clairement. Nous construisons point_cols en indexant un vecteur de trois couleurs avec as.numeric(iris$Species) — un idiome de R de base qui associe chaque niveau de facteur à une couleur.
Changer le titre et les étiquettes d’axes
main, xlab, ylab et zlab définissent le titre et les trois étiquettes d’axes, exactement comme dans la fonction plot() de R de base :
Préciser les unités des axes (cm) rend la figure explicite dans un rapport — le lecteur n’a besoin d’aucune légende pour savoir ce que mesure chaque axe.
Changer la forme, la couleur et la taille des points
Les arguments des graphiques de base pch (forme), color et cex.symbols (taille) stylisent les points. Une valeur unique s’applique à chaque point :
library(scatterplot3d)scatterplot3d(iris[, 1:3], pch =16, color ="#3a86d4", cex.symbols =1.2)
pch = 16 est un cercle plein, color = "#3a86d4" l’azur de la marque, et cex.symbols = 1.2 agrandit les marqueurs de 20 %. Voyez l’ensemble complet des symboles de tracé dans Formes de points en R.
Colorer et changer la forme des points par groupe
Pour distinguer les groupes, construisez un vecteur par point en indexant avec as.numeric() du facteur de regroupement. Vous pouvez faire varier la couleur, la forme, ou les deux :
library(scatterplot3d)# A colour and a shape per speciescolors <-c("#3a86d4", "#E69F00", "#56B4E9")shapes <-c(16, 17, 18)point_cols <- colors[as.numeric(iris$Species)]point_shapes <- shapes[as.numeric(iris$Species)]scatterplot3d(iris[, 1:3], pch = point_shapes, color = point_cols, angle =55)
as.numeric(iris$Species) transforme le facteur en 1, 2, 3 ; indexer les vecteurs colors et shapes avec lui donne à chaque fleur la couleur et le symbole de son espèce. La palette ici est adaptée au daltonisme. Pour en savoir plus sur le choix des couleurs, voyez Couleurs en R.
Changer l’angle de vue
angle fait pivoter toute la scène autour de l’axe vertical. Essayez quelques valeurs pour trouver la vue qui cache le moins les points les uns derrière les autres :
par(mfrow = c(1, 2)) place les deux vues côte à côte. Les mêmes données paraissent assez différentes selon chaque angle — choisissez celui où la structure qui vous intéresse est la plus nette.
Options de boîte et de grille
Deux arguments logiques contrôlent le cadre autour du nuage : box trace le cube englobant, et grid trace une grille de référence sur le sol (le plan xy). Désactivez l’un ou l’autre pour un rendu plus épuré :
grid = TRUE conserve la grille du sol comme repère de profondeur tandis que box = FALSE retire le contour du cube. La grille n’est tracée que sur le plan xy (sol) — c’est un comportement par défaut délibéré de scatterplot3d.
Ajouter des lignes de chute verticales
L’argument type = "h" trace une ligne verticale (« haute densité ») de chaque point jusqu’au sol. Ces lignes de chute fixent la position x–y de chaque point, rendant la hauteur (z) bien plus facile à lire :
library(scatterplot3d)colors <-c("#3a86d4", "#E69F00", "#56B4E9")point_cols <- colors[as.numeric(iris$Species)]scatterplot3d(iris[, 1:3], pch =16, type ="h", color = point_cols, angle =55)
type = "h" est le seul changement qui ajoute les tiges. C’est le moyen le plus efficace de rendre un nuage 3D statique lisible sur le papier, où vous ne pouvez pas faire pivoter pour juger la profondeur.
Ajouter un plan de régression
scatterplot3d() renvoie une liste de fonctions utilitaires pour ajouter des éléments à un graphique existant. La plus utile est plane3d(), qui trace le plan d’un modèle linéaire lm(z ~ x + y) à travers le nuage — l’analogue 3D d’une droite de régression. Ici nous modélisons le volume d’un arbre à partir de sa circonférence et de sa hauteur en utilisant les données intégrées trees :
library(scatterplot3d)data(trees)# 1. Draw the cloud and capture the returned helper objects3d <-scatterplot3d(trees, type ="h", color ="#3a86d4",angle =55, pch =16)# 2. Fit volume ~ girth + height and draw its planemodel <-lm(Volume ~ Girth + Height, data = trees)s3d$plane3d(model)
Le schéma est : assignez le graphique à s3d, ajustez le modèle avec lm(), puis appelez s3d$plane3d(model) pour superposer sa surface ajustée. plane3d() lit l’ordonnée à l’origine et les deux pentes du modèle et trace le plan correspondant — les points au-dessus sont sous-estimés, les points en dessous surestimés.
Ajouter des points supplémentaires et une légende
Le même objet renvoyé ajoute des points (points3d) et vous laisse placer une légende en convertissant des coordonnées 3D vers la projection 2D du graphique avec xyz.convert() :
library(scatterplot3d)colors <-c("#3a86d4", "#E69F00", "#56B4E9")point_cols <- colors[as.numeric(iris$Species)]s3d <-scatterplot3d(iris[, 1:3], pch =16, color = point_cols, angle =55)# Place a legend using a 3D anchor converted to 2Dlegend(s3d$xyz.convert(7.5, 3, 4.5),legend =levels(iris$Species),col = colors, pch =16)
s3d$xyz.convert(7.5, 3, 4.5) transforme un point de l’espace des données en coordonnées d’écran que legend() attend, pour que la boîte se place où vous le voulez. Vous pouvez aussi passer un mot-clé comme "right" ou "bottom" directement à legend() si vous n’avez pas besoin d’un contrôle au pixel près.
🟢 Avec un agent IA
Demandez à Prova« pourquoi mon plan de régression scatterplot3d ne s’affiche-t-il pas ? » — elle répond avec du code R que vous pouvez exécuter, donc la correction est reproductible. The runtime is the judge.Demander à Prova →
Problèmes courants
Le plan de régression n’apparaît pas.plane3d() est une méthode sur l’objet renvoyé, pas une fonction autonome. Vous devez d’abord capturer le graphique — s3d <- scatterplot3d(...) — puis appeler s3d$plane3d(model). Appeler plane3d() seul ne fait rien.
Tous les points sortent de la même couleur.color a besoin d’une valeur par point, pas d’une par groupe. Construisez le vecteur par point en indexant : colors[as.numeric(my_factor)]. Passer les trois couleurs de groupe directement les recycle dans l’ordre des lignes, pas par groupe.
cex ne redimensionne pas les marqueurs. Dans scatterplot3d() l’argument de taille des points est cex.symbols, pas cex (cex met à l’échelle le texte des axes). Utilisez cex.symbols = 1.2 pour agrandir les points.
Questions fréquentes
NoteComment faire un nuage de points 3D en R ?
Installez et chargez le package scatterplot3d, puis appelez scatterplot3d(data[, 1:3]) avec une matrice ou un data frame dont les trois colonnes sont les coordonnées x, y et z (ou utilisez la forme formule scatterplot3d(z ~ x + y)). Ajoutez pch, color et angle pour le styliser et le faire pivoter.
NoteComment colorer les points par groupe dans scatterplot3d ?
Construisez un vecteur de couleurs par point en indexant une palette avec le facteur de regroupement : my_colors <- c("#3a86d4", "#E69F00", "#56B4E9")[as.numeric(df$group)], puis passez-le comme color = my_colors. La même astuce avec pch fait varier la forme des points par groupe.
NoteComment changer l’angle de vue d’un nuage de points 3D en R ?
Utilisez l’argument angle : scatterplot3d(data, angle = 55). Il fait pivoter la scène autour de l’axe vertical. Essayez plusieurs valeurs (p. ex. 40, 55, 120) pour trouver la vue où les points se chevauchent le moins.
NoteComment ajouter un plan de régression à un scatterplot3d ?
Capturez le graphique — s3d <- scatterplot3d(...) — ajustez un modèle avec lm(z ~ x + y), puis superposez son plan avec s3d$plane3d(model). L’objet renvoyé offre aussi points3d() pour ajouter des points et xyz.convert() pour placer une légende.
NoteComment faire un graphique 3D interactif et rotatif en R ?
scatterplot3d trace une figure statique fixe. Pour un graphique 3D que vous pouvez faire tourner avec la souris, utilisez plotly (plotly::plot_ly(..., type = "scatter3d", mode = "markers")) ou le package rgl — meilleur pour l’exploration, tandis que scatterplot3d est meilleur pour une figure statique prête à publier.
Testez vos connaissances
ImportantExercice : un nuage de points 3D groupé avec des lignes de chute
À partir des données intégrées iris, tracez un nuage de points 3D des trois premières colonnes qui : colore chaque point par espèce avec une palette adaptée au daltonisme, utilise des cercles pleins (pch = 16), ajoute des lignes de chute verticales jusqu’au sol, et regarde le nuage sous angle = 45.
data(iris)# Build a per-point colour vector, then call scatterplot3d() here
AstuceIndice
Faites point_cols <- c("#3a86d4", "#E69F00", "#56B4E9")[as.numeric(iris$Species)], puis passez color = point_cols, pch = 16, type = "h" et angle = 45 à scatterplot3d(iris[, 1:3], ...).
as.numeric(iris$Species) associe chaque espèce à 1, 2, 3 ; indexer la palette avec lui donne une couleur par point. type = "h" ajoute les lignes de chute et angle = 45 définit la vue.
Vérification rapide. Vous appelez scatterplot3d(iris[, 1:3], color = c("red", "green", "blue")) et chaque point sort rouge, puis vert, puis bleu dans l’ordre des lignes — pas une couleur par espèce. Pourquoi ?
AstuceAfficher la réponse
color attend une valeur par point, pas par groupe. Le vecteur de trois couleurs est recyclé sur les 150 lignes. Construisez d’abord un vecteur par point : c("red", "green", "blue")[as.numeric(iris$Species)].
Conclusion
scatterplot3d est la façon rapide, en R de base, de tracer trois variables d’un coup : passez trois colonnes (ou une formule z ~ x + y), stylisez les points avec pch/color/cex.symbols, faites pivoter avec angle, et ajoutez de la profondeur avec des lignes de chute type = "h". Capturez l’objet renvoyé pour superposer un plan de régression (s3d$plane3d(lm(...))), des points supplémentaires (points3d), ou une légende (xyz.convert). Pour une vue interactive et rotative, passez à plotly ou rgl.
Leçons connexes
Nuage de points en R (base) — la base 2D, les formes de points et les symboles pch. · Couleurs en R — construisez les palettes adaptées au daltonisme utilisées ci-dessus. · Nuage de points ggplot2 — la voie de la grammaire des graphiques pour deux variables.
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). Copiez n’importe quel bloc et exécutez-le pour les reproduire. The runtime is the judge.
@online{2026,
author = {},
title = {scatterplot3d en R : faire un nuage de points 3D},
date = {2026-06-27},
url = {https://www.datanovia.com/learn/data-visualization/scatterplot3d},
langid = {fr}
}