Transformez une matrice de corrélation en une heatmap ggplot2 prête à publier — carrés ou cercles, triangles, réordonnancement, coefficients et marques de significativité — avec ggcorrplot, ainsi que la recette geom_tile() en dessous
Visualisez une matrice de corrélation sous forme de heatmap ggplot2 en R. Calculez-la avec cor(), puis tracez-la en un seul appel avec ggcorrplot() — carrés ou cercles, triangles supérieur/inférieur, réordonnancement hiérarchique, coefficients sur les tuiles et cellules non significatives barrées — et découvrez la recette geom_tile() + scale_fill_gradient2() que le package construit pour vous.
Date de publication
10 juillet 2026
Modifié
11 juillet 2026
AstucePoints clés
Une heatmap de corrélation est une matrice de corrélation dessinée sous forme de grille colorée — le moyen le plus rapide de voir quelles variables évoluent ensemble.
Calculez la matrice avec la fonction de base cor(), puis tracez-la en un seul appel avec ggcorrplot::ggcorrplot() — le résultat est un objet ggplot2 ordinaire que vous pouvez restyliser et étendre.
Choisissez une méthode ("square" ou "circle"), une disposition (type = "lower"/"upper"), et réordonnez avec hc.order = TRUE pour faire ressortir les regroupements de variables liées.
Imprimez les coefficients avec lab = TRUE, et passez une matrice de p-value (cor_pmat()) pour que les cellules non significatives soient barrées (insig = "pch") ou masquées (insig = "blank").
Sous le capot, ce n’est que geom_tile() + scale_fill_gradient2() — cette leçon construit aussi cette heatmap à la main pour que vous puissiez personnaliser chaque couche.
Introduction
Vous avez un tableau de nombres et voulez savoir comment ils sont liés — le poids augmente-t-il avec la consommation ? quelles variables portent le même signal ? Une heatmap de corrélation répond à cela d’un coup d’œil : elle encode chaque corrélation par paires dans une grille colorée, si bien que les relations positives et négatives fortes ressortent et que les variables redondantes se regroupent.
Cette leçon utilise ggcorrplot — un petit package qui dessine une matrice de corrélation sous forme de graphique ggplot2 — sur les données intégrées mtcars. Vous calculerez la matrice une fois avec la fonction de base cor(), puis la tracerez en un seul appel, en ajoutant réordonnancement, coefficients et marques de significativité. Ensuite, parce que les internautes veulent souvent la recette brute, vous construirez la même heatmap à la main avec geom_tile() et scale_fill_gradient2() — ce que ggcorrplot() empaquette précisément pour vous.
Vous préférez des glyphes ronds et un workflow en graphiques de base ? La leçon sur le corrélogramme fait le même travail avec le package corrplot. Optez pour ggcorrplot lorsque vous voulez un objet ggplot2 que vous pouvez thématiser et composer avec +.
Calculer la matrice de corrélation
Chaque heatmap part d’une matrice de corrélation. cor() renvoie les corrélations de Pearson par paires ; arrondir à une décimale garde les coefficients lisibles quand vous les imprimez sur les tuiles plus tard.
library(ggcorrplot)data(mtcars)corr <-round(cor(mtcars), 1)corr[1:6, 1:6] # a corner of the 11x11 matrix
Pour marquer la significativité plus tard, vous avez aussi besoin de la matrice des p-values de corrélation. cor_pmat() [dans ggcorrplot] la calcule en exécutant stats::cor.test() sur chaque paire :
ggcorrplot() ne calcule jamais les corrélations lui-même — il prend une matrice que vous avez déjà, si bien qu’il fonctionne tout aussi bien avec une matrice de Spearman, une matrice de corrélation partielle, ou n’importe quelle matrice carrée de coefficients.
Tracez-la en un seul appel avec ggcorrplot()
Passez la matrice et vous obtenez la heatmap complète. Par défaut, chaque corrélation est encodée par un carré coloré : rouge pour positif, bleu pour négatif, l’intensité étant proportionnelle au coefficient. (La palette par défaut est colors = c("blue", "white", "red"), lue de bas → milieu → haut, donc +1 est rouge.)
method = "circle" encode la corrélation par l’aire du cercle plutôt que par un carré plein — utile lorsque vous voulez faire ressortir l’amplitude, et pas seulement le signe.
Dans l’ordre des variables, la structure est difficile à voir. Définissez hc.order = TRUE pour réordonner les variables par classification hiérarchique afin que les variables corrélées se retrouvent côte à côte — les blocs de variables liées deviennent évidents. outline.color dessine un séparateur net autour de chaque tuile.
Une matrice de corrélation est symétrique, les deux triangles portent donc la même information. Supprimez la moitié redondante avec type = "lower" (ou type = "upper") :
library(ggcorrplot)corr <-round(cor(mtcars), 1)ggcorrplot(corr, hc.order =TRUE, type ="lower", outline.color ="white")
Imprimer les coefficients
lab = TRUE imprime le coefficient de corrélation à l’intérieur de chaque tuile, si bien que la heatmap fait aussi office de tableau lisible. lab_size ajuste la taille du texte.
Une corrélation peut être proche de zéro par hasard. Fournissez la matrice de p-value comme p.mat et ggcorrplot() signale quelles corrélations sont significatives à sig.level (par défaut 0.05). Trois styles, choisis avec insig :
insig = "pch" (par défaut) barre les cellules non significatives :
insig = "stars" inverse l’accent : au lieu de barrer les cellules non significatives, il ajoute des étoiles de significativité (***, **, * pour p < 0.001, 0.01, 0.05) aux cellules significatives. Avec lab = TRUE, vous obtenez le coefficient et sa significativité dans une seule figure — la vue prête à publier :
colors définit le gradient divergent sous forme de vecteur de longueur 3 (bas / milieu / haut), et ggtheme remplace le thème ggplot2 de base. tl.col et tl.srt stylisent les étiquettes de noms de variables.
Parce que ggcorrplot() renvoie un objet ggplot ordinaire, vous pouvez aussi l’affiner avec la grammaire habituelle — ajoutez un titre labs(), une légende de figure, ou n’importe quelle couche supplémentaire avec +.
Construire la même heatmap à la main avec geom_tile()
ggcorrplot() est un wrapper pratique autour d’un idiome ggplot2 standard : remodeler la matrice au format long, mapper la corrélation sur fill, et dessiner une tuile par cellule. Le construire vous-même vaut la peine — vous obtenez un contrôle total sur chaque couche, et cela fonctionne pour n’importe quelle matrice, pas seulement les corrélations.
Remodeler la matrice au format long
ggplot2 veut une ligne par cellule, pas une matrice carrée. R de base fait le remodelage sans aucun package supplémentaire : as.table() transforme la matrice en un tableau de type contingence et as.data.frame() la déroule en trois colonnes — Var1, Var2 et Freq (la valeur de corrélation) :
Les anciens tutoriels utilisent reshape2::melt() ici. as.data.frame(as.table(m)) de R de base fait le même travail sans dépendance — pratique dans le bac à sable en navigateur.
Mapper la corrélation sur le remplissage
Maintenant, dessinez une tuile par cellule et colorez-la selon le coefficient. scale_fill_gradient2() est la clé : c’est une échelle divergente ancrée à midpoint = 0, de sorte que les corrélations nulles sont blanches, les positives penchent d’un côté et les négatives de l’autre. limit = c(-1, 1) fixe l’échelle sur toute la plage de corrélation, et coord_fixed() garde les tuiles carrées.
Pour n’afficher que le triangle supérieur, mettez la moitié inférieure de la matrice à NAavant le remodelage, puis supprimez les cellules vides. upper.tri() / lower.tri() fournissent les masques logiques :
library(ggplot2)cormat <-round(cor(mtcars[, c("mpg", "disp", "hp", "drat", "wt", "qsec")]), 2)cormat[lower.tri(cormat)] <-NA# keep the upper trianglelong <-as.data.frame(as.table(cormat))long <- long[!is.na(long$Freq), ] # drop the masked cellsggplot(long, aes(Var1, Var2, fill = Freq)) +geom_tile(color ="white") +scale_fill_gradient2(low ="#3a86d4", high ="#b2182b", mid ="white",midpoint =0, limit =c(-1, 1), name ="Correlation") +coord_fixed() +theme_minimal()
Réordonner par classification et ajouter les coefficients
Enfin, reproduisez à la main les deux touches de ggcorrplot : réordonnez les variables par classification hiérarchique (regroupement sur la distance basée sur la corrélation (1 - r) / 2), puis imprimez les coefficients avec geom_text().
library(ggplot2)cormat <-round(cor(mtcars[, c("mpg", "disp", "hp", "drat", "wt", "qsec")]), 2)# Reorder by hierarchical clustering on a correlation distancedd <-as.dist((1- cormat) /2)ord <-hclust(dd)$ordercormat <- cormat[ord, ord]cormat[lower.tri(cormat)] <-NAlong <-as.data.frame(as.table(cormat))long <- long[!is.na(long$Freq), ]ggplot(long, aes(Var1, Var2, fill = Freq)) +geom_tile(color ="white") +geom_text(aes(label = Freq), size =3) +scale_fill_gradient2(low ="#3a86d4", high ="#b2182b", mid ="white",midpoint =0, limit =c(-1, 1), name ="Correlation") +coord_fixed() +theme_minimal() +theme(axis.title =element_blank())
Voilà toutes les fonctionnalités que ggcorrplot() vous donnait en un seul appel — réordonnancement, un triangle masqué, coefficients sur les tuiles — reproduites depuis la grammaire brute. Utilisez le package pour la rapidité ; descendez à geom_tile() quand vous avez besoin d’une couche qu’il n’expose pas.
Essayez en direct
Tracez une heatmap de corrélation d’un autre jeu de données, ou changez la méthode, la disposition et les couleurs. Le bac à sable démarre au premier Run.
🟢 Avec un agent IA
Demandez à Prova« trace une heatmap de corrélation de mes données avec ggcorrplot, réordonne-la pour montrer les regroupements, imprime les coefficients, et barre les corrélations non significatives » — elle répond avec du code que vous pouvez exécuter sur vos propres données. The runtime is the judge.Demander à Prova →
Problèmes fréquents
Les colonnes non numériques font échouer cor().cor() a besoin d’une matrice entièrement numérique — supprimez ou convertissez d’abord les colonnes facteur et caractère, p. ex. cor(mydata[sapply(mydata, is.numeric)]).
Les valeurs manquantes donnent des corrélations NA. Avec des données incomplètes, ajoutez use = "pairwise.complete.obs" à cor() pour que chaque corrélation utilise les observations présentes.
ggcorrplot() ne calcule pas les corrélations. Il attend une matrice de corrélation, pas des données brutes. Passer une data frame déclenche une erreur — calculez cor() (et cor_pmat()) d’abord, puis passez la matrice.
Questions fréquentes
NoteComment créer une heatmap de matrice de corrélation en R ?
Calculez la matrice avec cor(data), puis tracez-la en un seul appel avec ggcorrplot::ggcorrplot(corr). Ajoutez hc.order = TRUE pour regrouper les variables liées, type = "lower" pour supprimer la moitié redondante, lab = TRUE pour imprimer les coefficients, et une matrice de p-value via p.mat pour marquer la significativité.
NoteQuelle est la différence entre ggcorrplot et corrplot ?
Les deux visualisent une matrice de corrélation. ggcorrplot renvoie un objet ggplot2, vous pouvez donc le restyliser avec des thèmes et ajouter des couches avec + ; corrplot est un package en graphiques de base avec plus d’options de glyphes (pie, ellipse, dispositions mixtes). Si vous travaillez déjà en ggplot2, préférez ggcorrplot ; pour un corrélogramme en graphiques de base, utilisez corrplot.
NoteComment ajouter les coefficients de corrélation à la heatmap ?
Avec ggcorrplot, définissez lab = TRUE. En construisant la heatmap à la main, ajoutez une couche geom_text(aes(label = Freq)) après geom_tile(). Arrondir la matrice d’abord (round(cor(x), 1)) garde les valeurs imprimées lisibles.
NoteComment n’afficher que les corrélations statistiquement significatives ?
Calculez une matrice de p-value avec cor_pmat(data), puis passez-la comme p.mat. insig = "pch" (par défaut) barre les cellules non significatives ; insig = "blank" les masque ; insig = "stars" ajoute plutôt des étoiles de significativité aux cellules significatives.
Les corrélations vont de −1 à 1 et sont significatives dans les deux directions, donc une échelle divergente centrée sur 0 mappe zéro à une couleur neutre (blanc) et pousse les corrélations positives et négatives vers des teintes opposées. limit = c(-1, 1) fixe l’échelle sur toute la plage pour que les couleurs soient comparables d’un graphique à l’autre.
Testez vos connaissances
ImportantPratique
Exécutez-le. Dans la cellule interactive ci-dessous, tracez un ggcorrplot en triangle supérieur, réordonné avec hc.order, des quatre colonnes numériques d’iris, avec les coefficients imprimés. Remplissez le blanc.
Conceptuel. Vous passez p.mat et voyez deux cellules barrées. Que signifie une cellule barrée, et pourquoi ne devriez-vous pas l’interpréter ?
NoteIndice
Remplissez le blanc avec "upper" (ou "lower"). Pour la question 2, rappelez-vous que p.mat porte les p-values et que ggcorrplot() barre les cellules dont la p-value dépasse sig.level.
NoteSolution
corr <-round(cor(iris[, 1:4]), 1)ggcorrplot(corr, type ="upper", hc.order =TRUE, lab =TRUE)#> Petal.Length and Petal.Width cluster together (r near 1).
Pour la question 2 : une cellule barrée est une corrélation qui n’est pas statistiquement significative au sig.level choisi (par défaut 0.05) — sa p-value est au-dessus du seuil, donc la relation pourrait plausiblement être nulle. N’interprétez que les cellules qui survivent.
Vérification rapide. Quel argument réordonne les variables pour que les corrélées se retrouvent ensemble ?
NoteAfficher la réponse
hc.order = TRUE — il réordonne la matrice par classification hiérarchique. type contrôle quel triangle s’affiche, lab imprime les coefficients, et p.mat marque la significativité.
Conclusion
Vous pouvez maintenant construire une heatmap de matrice de corrélation en R de deux façons : la voie rapide avec ggcorrplot::ggcorrplot() — un seul appel pour carrés ou cercles, réordonnancement, un triangle, coefficients et marques de significativité — et la voie manuelle avec geom_tile() + scale_fill_gradient2(), qui est exactement ce que le package empaquette. Optez pour ggcorrplot au quotidien ; descendez au ggplot2 brut quand vous avez besoin d’une couche qu’il n’expose pas.
Leçons connexes
Matrice de corrélation en R — calcul de la matrice et de ses p-values (les données derrière l’image). · Corrélogramme en R — la même visualisation avec le package corrplot et des glyphes ronds. · Test de corrélation en R — tester une seule paire de variables avec Pearson ou Spearman.
Chaque résultat de cette page a été produit par le code montré, exécuté au moment du build contre un environnement R figé — modifiez n’importe quel bloc et faites Run pour le reproduire vous-même.