Matrice de nuages de points en R : la fonction pairs()
Tracez chaque paire de variables d’un coup, colorez par groupe et ajoutez les corrélations sur les panneaux
Construisez une matrice de nuages de points en R de base avec pairs(). Tracez toutes les paires de variables d’un coup d’œil, choisissez les colonnes à afficher, colorez les points par un facteur de groupe et écrivez des fonctions de panneau personnalisées qui placent corrélations, histogrammes et lissages sur les panneaux inférieurs, supérieurs et diagonaux.
Date de publication
27 juin 2026
Modifié
7 juillet 2026
AstucePoints clés
pairs() dessine une matrice de nuages de points — chaque paire de colonnes numériques, d’un seul coup — sans aucun package.
Passez une matrice numérique ou un data.frame ; sélectionnez les colonnes avec data[, 1:4] ou les noms de colonnes pour contrôler quelles paires apparaissent.
Dessinez la moitié de la matrice avec upper.panel = NULL (gardez le triangle inférieur) ou lower.panel = NULL (gardez le supérieur).
Colorez les points par un groupe avec col = palette[factor], en utilisant une palette adaptée au daltonisme.
Remplacez n’importe quel panneau par une fonction personnalisée (upper.panel, lower.panel, diag.panel) pour afficher des corrélations, des histogrammes ou des lissages.
Introduction
Vous avez plusieurs variables numériques et vous voulez voir comment elles se relient — avant d’ajuster quoi que ce soit. Une matrice de nuages de points dessine chaque nuage de points par paire dans une seule grille, vous pouvez donc balayer toutes les corrélations d’un coup d’œil. C’est le premier regard le plus rapide sur un petit jeu de données numérique.
R de base le fait avec une seule fonction : pairs(). Donnez-lui les colonnes que vous voulez et elle dispose une grille n × n — chaque cellule est le nuage de points d’une variable contre une autre, la diagonale étiquette les variables. Cette leçon couvre l’appel de base, la sélection des variables, la coloration des points par groupe, et l’écriture de fonctions de panneau qui placent corrélations, histogrammes et lissages sur des panneaux spécifiques.
Vous préférez la grammaire des graphiques ? GGally::ggpairs() construit la même matrice en ggplot2 — voir la leçon nuage de points ggplot2 pour cet idiome.
Les données
Nous utilisons le jeu de données intégré iris : quatre mesures de fleurs (longueur et largeur des sépales et des pétales) pour 50 fleurs de chacune des trois espèces. Les quatre colonnes numériques sont celles que nous voulons comparer ; la cinquième, Species, est le facteur de regroupement.
Passez les quatre colonnes numériques — iris[, 1:4] écarte le facteur Species — et pairs() dessine les seize panneaux. pch = 19 utilise des points pleins, qui se lisent mieux que le défaut ouvert.
pairs(iris[, 1:4], pch =19)
Lisez-la comme un tableau : le panneau en ligne i, colonne j trace la variable i (verticale) contre la variable j (horizontale). Les triangles inférieur et supérieur sont des images miroir — les mêmes paires avec les axes échangés — vous n’avez donc jamais besoin de lire qu’une seule moitié.
Sélectionner quelles variables afficher
pairs() trace les colonnes que vous lui passez. Utilisez un indice ou des noms de colonnes pour vous concentrer sur un sous-ensemble — ici juste les deux mesures des pétales contre la longueur des sépales :
Vous pouvez aussi passer une formule : pairs(~ Sepal.Length + Petal.Length + Petal.Width, data = iris) sélectionne les mêmes colonnes et est pratique quand les données en ont beaucoup plus.
N’afficher qu’un seul triangle
Comme les deux triangles sont redondants, vous ne voulez souvent qu’un seul. Définissez upper.panel = NULL pour garder le triangle inférieur, ou lower.panel = NULL pour garder le supérieur.
pairs(iris[, 1:4], pch =19, lower.panel =NULL)
Cela écarte les panneaux dupliqués et laisse plus de place à ce que vous gardez — utile dès que vous commencez à ajouter des corrélations ou des histogrammes du côté vide.
Colorer les points par groupe
Mapper un facteur à la couleur transforme la matrice en une vérification rapide de la séparation des groupes. Définissez une palette adaptée au daltonisme avec une couleur par niveau, puis indexez-la par le facteur : my_cols[iris$Species] donne à chaque point la couleur de son espèce. cex = 0.6 réduit les points pour que les panneaux denses restent lisibles.
my_cols <-c("#3a86d4", "#f4a259", "#5fad56") # colourblind-safe, one per speciespairs(iris[, 1:4], pch =19, cex =0.6,col = my_cols[iris$Species],lower.panel =NULL)
Les panneaux des pétales se scindent nettement en trois nuages — la taille des pétales sépare les espèces bien mieux que la taille des sépales. Ce genre de lecture est exactement ce à quoi sert la matrice.
Chaque région de la matrice prend sa propre fonction de dessin : lower.panel, upper.panel et diag.panel. Une fonction de panneau reçoit les x et y de cette cellule et dessine dedans. C’est ainsi que vous transformez une matrice ordinaire en la disposition familière « nuage en bas, corrélation en haut, histogramme sur la diagonale ».
Afficher la corrélation sur un panneau
panel.cor calcule la corrélation de Pearson pour la paire et l’écrit au centre de la cellule, en redimensionnant le texte pour que les corrélations plus fortes apparaissent plus grandes. Nous réinitialisons par("usr") à un système de coordonnées 0–1 pour que text() puisse placer l’étiquette par fraction.
my_cols <-c("#3a86d4", "#f4a259", "#5fad56")# Lower panel: the correlation, text sized by strengthpanel.cor <-function(x, y, ...) { usr <-par("usr"); on.exit(par(usr))par(usr =c(0, 1, 0, 1)) r <-round(cor(x, y), 2) txt <-paste0("R = ", r) cex <-0.8/strwidth(txt)text(0.5, 0.5, txt, cex = cex *abs(r))}# Upper panel: coloured scatterupper.panel <-function(x, y, ...) {points(x, y, pch =19, cex =0.6, col = my_cols[iris$Species])}pairs(iris[, 1:4],lower.panel = panel.cor,upper.panel = upper.panel)
Les corrélations confirment l’histoire visuelle : la longueur et la largeur des pétales évoluent ensemble presque parfaitement (R = 0.96), tandis que la largeur des sépales suit à peine le reste.
Histogrammes sur la diagonale
La diagonale ne fait habituellement que nommer la variable. Remplacez-la par un histogramme pour voir la distribution de chaque variable dans la même grille. panel.hist dessine des barres mises à l’échelle de la cellule :
my_cols <-c("#3a86d4", "#f4a259", "#5fad56")panel.hist <-function(x, ...) { usr <-par("usr"); on.exit(par(usr))par(usr =c(usr[1:2], 0, 1.5)) h <-hist(x, plot =FALSE) breaks <- h$breaks; nB <-length(breaks) y <- h$counts; y <- y /max(y)rect(breaks[-nB], 0, breaks[-1], y, col ="#cfe0f4", border ="white")}panel.cor <-function(x, y, ...) { usr <-par("usr"); on.exit(par(usr))par(usr =c(0, 1, 0, 1)) r <-round(cor(x, y), 2)text(0.5, 0.5, paste0("R = ", r), cex =1.1)}upper.panel <-function(x, y, ...) {points(x, y, pch =19, cex =0.6, col = my_cols[iris$Species])}pairs(iris[, 1:4],lower.panel = panel.cor,upper.panel = upper.panel,diag.panel = panel.hist)
La longueur et la largeur des pétales sont clairement bimodales — une espèce se place à l’écart des deux autres. C’est la structure de groupe que vous avez vue dans les panneaux colorés, désormais visible sur la diagonale aussi.
Un lissage dans le panneau inférieur
pairs() fournit un panel.smooth prêt à l’emploi qui ajoute une courbe de tendance LOWESS par-dessus les points — utile pour repérer les relations non linéaires. Passez-le à lower.panel :
Le lissage se courbe là où une relation est courbe et reste droit là où elle est linéaire — un diagnostic rapide avant de vous tourner vers un modèle.
Un seul appel avec le package psych
Écrire des fonctions de panneau est flexible mais verbeux. Le package psych regroupe toute la disposition dans une seule fonction, pairs.panels() : nuages de points sous la diagonale, histogrammes dessus, et la corrélation de Pearson au-dessus — plus des courbes de densité et des ellipses de corrélation optionnelles.
library(psych)pairs.panels(iris[, 1:4],method ="pearson", # correlation typehist.col ="#3a86d4",density =TRUE, # density curve over each histogramellipses =TRUE) # correlation ellipses on the scatters
Avec lm = TRUE elle dessine des droites de régression au lieu de lissages, et un facteur de regroupement passé via bg colore les points. C’est la voie la plus rapide vers une matrice de style publication quand vous n’avez pas besoin de personnaliser chaque panneau à la main.
Deux autres options en un seul appel existent si vous les avez installées : car::scatterplotMatrix() ajoute des boîtes à moustaches ou la densité sur la diagonale et des droites de régression par groupe, et GGally::ggpairs() construit la matrice en ggplot2 (variables continues et catégorielles). Toutes deux suivent la même idée — choisissez celle dont les défauts correspondent à la figure que vous voulez.
Essayez en direct
Modifiez les colonnes, la palette ou les fonctions de panneau et appuyez sur Run — cela s’exécute dans votre navigateur via webR, sans installation.
🟢 Avec un agent IA
Demandez à Prova« comment placer un histogramme sur la diagonale d’un graphique pairs() ? » — elle répond avec du code R de base que vous pouvez exécuter, donc la correction est reproductible. The runtime is the judge.Demander à Prova →
Problèmes courants
pairs() génère une erreur sur les colonnes non numériques. Une matrice de nuages de points a besoin de nombres. Si vous passez un data.frame entier qui inclut une colonne facteur ou caractère (comme iris$Species), sélectionnez d’abord uniquement les colonnes numériques — iris[, 1:4], ou iris[, sapply(iris, is.numeric)] pour garder automatiquement chaque colonne numérique.
Les points sortent tous d’une seule couleur.col colore les points dans l’ordre, donc pour colorer par groupe vous devez indexer une palette par le facteur : col = my_cols[iris$Species], et non col = iris$Species (qui utilise les codes entiers du facteur comme positions dans la palette et se trompe facilement). Définissez une couleur par niveau et indexez-la.
Ma fonction de panneau ne dessine rien ou au mauvais endroit. Les fonctions de panneau dessinent dans le système de coordonnées propre à la cellule. Si vous le réinitialisez avec par(usr = c(0, 1, 0, 1)) pour placer le texte par fraction, restaurez-le toujours avec on.exit(par(usr)) pour que le panneau suivant ne soit pas perturbé.
Questions fréquentes
NoteComment créer une matrice de nuages de points en R ?
Utilisez la fonction de base pairs(). Passez une matrice numérique ou les colonnes numériques d’un data frame — pairs(iris[, 1:4]) — et elle dessine chaque nuage de points par paire dans une grille. Aucun package n’est requis.
NoteComment sélectionner quelles variables apparaissent dans pairs() ?
Ne passez à pairs() que les colonnes que vous voulez, par indice ou par nom : pairs(data[, c("a", "b", "c")]). Vous pouvez aussi utiliser une formule : pairs(~ a + b + c, data = data).
NoteComment colorer les points par groupe dans un graphique pairs() ?
Construisez une palette avec une couleur par niveau de groupe et indexez-la par le facteur : pairs(data[, 1:4], col = my_cols[data$group]). Utilisez my_cols[data$group], et non le facteur lui-même, pour que chaque niveau corresponde à la couleur que vous voulez.
NoteComment ajouter des corrélations ou des histogrammes à un graphique pairs() ?
Passez une fonction personnalisée à lower.panel, upper.panel ou diag.panel. Une fonction panel.cor peut text() la corrélation sur un panneau, et une fonction panel.hist peut dessiner un histogramme sur la diagonale. La fonction pairs.panels() du package psych fait les deux en un seul appel.
NoteComment n’afficher que la moitié inférieure ou supérieure d’une matrice de nuages de points ?
Définissez upper.panel = NULL pour garder seulement le triangle inférieur, ou lower.panel = NULL pour garder seulement le supérieur. Les deux moitiés sont des images miroir, donc en supprimer une retire les panneaux redondants.
Testez vos connaissances
ImportantExercice : une demi-matrice colorée avec corrélations
À partir des colonnes mpg, hp, wt et qsec de mtcars, dessinez une matrice de nuages de points qui affiche les nuages de points dans le triangle supérieur et la corrélation dans le triangle inférieur. Colorez les points d’un seul azur ("#3a86d4").
AstuceIndice
Définissez panel.cor exactement comme dans la leçon (réinitialisez par("usr") à c(0,1,0,1), puis text() la cor(x, y)). Passez-la comme lower.panel, dessinez les points avec upper.panel ou les arguments pch/col, et c’est tout.
AstuceSolution
vars <- mtcars[, c("mpg", "hp", "wt", "qsec")]panel.cor <-function(x, y, ...) { usr <-par("usr"); on.exit(par(usr))par(usr =c(0, 1, 0, 1)) r <-round(cor(x, y), 2)text(0.5, 0.5, paste0("R = ", r), cex =1.2)}pairs(vars,lower.panel = panel.cor,upper.panel =function(x, y) points(x, y, pch =19, cex =0.7, col ="#3a86d4"))
La fonction upper.panel dessine le nuage coloré ; panel.cor écrit chaque corrélation dans la cellule inférieure miroir.
Vérification rapide. Vous voulez garder seulement le triangle inférieur d’un graphique pairs(). Quel argument définissez-vous à NULL ?
AstuceAfficher la réponse
upper.panel = NULL. Définir upper.panel = NULL efface le triangle supérieur et laisse l’inférieur ; lower.panel = NULL fait l’inverse.
Conclusion
pairs() est la fonction unique de R de base pour une matrice de nuages de points : donnez-lui des colonnes numériques et elle trace chaque paire d’un coup. Sélectionnez les variables avec un indice ou une formule, écartez un triangle redondant avec upper.panel/lower.panel = NULL, colorez les points en indexant une palette avec votre facteur de groupe, et substituez des fonctions de panneau personnalisées pour les corrélations, histogrammes ou lissages. Quand vous voulez tout cela en un seul appel, psych::pairs.panels() l’emballe.
Leçons connexes
Nuage de points en R — le graphique à une paire à partir duquel la matrice est construite. · Ajouter une légende — étiquetez les groupes que vous colorez. · Couleurs en R — construisez des palettes de groupe adaptées au daltonisme. · Nuage de points ggplot2 — l’approche par la grammaire des graphiques (et GGally::ggpairs() pour la matrice).
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.
@online{2026,
author = {},
title = {Matrice de nuages de points en R : la fonction pairs()},
date = {2026-06-27},
url = {https://www.datanovia.com/learn/data-visualization/r-base/scatterplot-matrix},
langid = {fr}
}