Cela ressemble beaucoup à l'exemple d'OP (polices, couleurs, mise en page). On dirait que l'original a également été créé avec un treillis. Excellente réponse détaillée, +1.
Marek
1
Merci pour la réponse. Beaucoup de gens sont habitués aux graphiques de corrélation dans lesquels la diagonale contenant 1-s va du carré supérieur gauche au carré inférieur droit (voir l'exemple de figure dans la question), plutôt que du carré inférieur gauche au carré supérieur droit, comme dans votre Solution. Voici comment résoudre ce problème: cor_reversed <- apply (cor, 2, rev); levelplot (t (cor_reversed), ...)
sautez le
@ bill_080 pourquoi copier-coller votre code n'imprimera pas la matrice de corrélation?
Pavlos Panteliadis
59
Ressemble plutôt "moins", mais vaut la peine d'être vérifié (car il donne plus d'informations visuelles):
La bibliothèque ggplot2 peut gérer cela avec geom_tile(). Il semble que ce graphique ci-dessus ait pu être redimensionné, car il n'y a pas de corrélations négatives, alors prenez cela en considération avec vos données. Utilisation du mtcarsjeu de données:
library(ggplot2)
library(reshape)
z <- cor(mtcars)
z.m <- melt(z)
ggplot(z.m, aes(X1, X2, fill = value))+ geom_tile()+
scale_fill_gradient(low ="blue", high ="yellow")
MODIFIER :
ggplot(z.m, aes(X1, X2, fill = value))+ geom_tile()+
scale_fill_gradient2(low ="blue", high ="yellow")
permet de spécifier la couleur du point médian et le blanc par défaut peut donc être un bon ajustement ici. D'autres options peuvent être trouvées sur le site Web de ggplot ici et ici .
sympa (+1)! Bien que j'ajoute une échelle de rupture manuelle (par exemple:) c(-1, -0.6, -0.3, 0, 0.3, 0.6, 1)avec "white"au milieu pour laisser les couleurs refléter la symétrie de la corrélation efficace.
daroczig
@Daroczig - Bon point. Il semble que scale_fill_gradient2()la fonctionnalité que vous décrivez soit obtenue automatiquement. Je ne savais pas que cela existait.
Chase
1
en ajoutant à ceci: p <- ggplot(.....) + ... + ....; library(plotly); ggplotly(p)le rendra interactif
schlusie
Pour faire passer les diagonales 1 du haut à gauche vers le bas à droite, l'inversion des niveaux de facteur est nécessaire pour X1utiliser:z.m$X1 <- factor(z.m$X1, levels = rev(levels( z.m$X1 )))
arun
11
Utilisez le package corrplot:
library(corrplot)
data(mtcars)
M <- cor(mtcars)## different color series
col1 <- colorRampPalette(c("#7F0000","red","#FF7F00","yellow","white","cyan","#007FFF","blue","#00007F"))
col2 <- colorRampPalette(c("#67001F","#B2182B","#D6604D","#F4A582","#FDDBC7","#FFFFFF","#D1E5F0","#92C5DE","#4393C3","#2166AC","#053061"))
col3 <- colorRampPalette(c("red","white","blue"))
col4 <- colorRampPalette(c("#7F0000","red","#FF7F00","yellow","#7FFF7F","cyan","#007FFF","blue","#00007F"))
wb <- c("white","black")
par(ask =TRUE)## different color scale and methods to display corr-matrix
corrplot(M, method="number", col="black", addcolorlabel="no")
corrplot(M, method="number")
corrplot(M)
corrplot(M, order ="AOE")
corrplot(M, order ="AOE", addCoef.col="grey")
corrplot(M, order="AOE", col=col1(20), cl.length=21,addCoef.col="grey")
corrplot(M, order="AOE", col=col1(10),addCoef.col="grey")
corrplot(M, order="AOE", col=col2(200))
corrplot(M, order="AOE", col=col2(200),addCoef.col="grey")
corrplot(M, order="AOE", col=col2(20), cl.length=21,addCoef.col="grey")
corrplot(M, order="AOE", col=col2(10),addCoef.col="grey")
corrplot(M, order="AOE", col=col3(100))
corrplot(M, order="AOE", col=col3(10))
corrplot(M, method="color", col=col1(20), cl.length=21,order ="AOE", addCoef.col="grey")if(TRUE){
corrplot(M, method="square", col=col2(200),order ="AOE")
corrplot(M, method="ellipse", col=col1(200),order ="AOE")
corrplot(M, method="shade", col=col3(20),order ="AOE")
corrplot(M, method="pie", order ="AOE")## col=wb
corrplot(M, col = wb, order="AOE", outline=TRUE, addcolorlabel="no")## like Chinese wiqi, suit for either on screen or white-black print.
corrplot(M, col = wb, bg="gold2", order="AOE", addcolorlabel="no")}
Ce type de graphique est appelé une "carte thermique" entre autres termes. Une fois que vous avez votre matrice de corrélation, tracez-la à l'aide de l'un des différents didacticiels disponibles.
Je ne sais pas si l'appeler une «carte thermique» est une invention assez moderne. Cela semble logique si vous essayez d'afficher les «points chauds» en utilisant un jeu de couleurs rouge-orange-jaune, mais en général, il ne s'agit que d'un tracé d'image, ou d'un tracé matriciel ou d'un tracé raster. Je serai intéressé de trouver la plus ancienne référence qui l'appelle une «carte thermique». tldr; "[la citation nécessaire]"
Spacedman
Je pense que vous avez raison, la carte thermique n'est pas nécessairement le nom le plus ancien. Wikipedia répertorie un article de 1957, mais j'ai vérifié cet article et le terme «carte thermique» n'apparaît nulle part (et les graphiques ne ressemblent pas exactement à la forme actuelle).
Ari B.Friedman
5
J'ai travaillé sur quelque chose de similaire à la visualisation publiée par @daroczig, avec du code posté par @Ulrik en utilisant la plotcorr()fonction du ellipsepackage. J'aime l'utilisation des ellipses pour représenter les corrélations et l'utilisation des couleurs pour représenter les corrélations négatives et positives. Cependant, je voulais que les couleurs accrocheuses se démarquent pour les corrélations proches de 1 et -1, pas pour celles proches de 0.
J'ai créé une alternative dans laquelle des ellipses blanches sont superposées sur des cercles colorés. Chaque ellipse blanche est dimensionnée de telle sorte que la proportion du cercle coloré visible derrière elle est égale à la corrélation au carré. Lorsque la corrélation est proche de 1 et -1, l'ellipse blanche est petite et une grande partie du cercle coloré est visible. Lorsque la corrélation est proche de 0, l'ellipse blanche est grande et une petite partie du cercle coloré est visible.
Je me rends compte que cela fait un moment, mais les nouveaux lecteurs pourraient être intéressés rplot()par le corrrpackage ( https://cran.rstudio.com/web/packages/corrr/index.html ), qui peut produire les types de parcelles que @daroczig mentionne , mais concevoir une approche de pipeline de données:
Vous trouverez ci-dessous une image statique du graphique résultant.
Vous pouvez voir la version interactive sur mon blog . Passez la souris sur la carte thermique pour voir les valeurs de ligne, de colonne et de cellule. Cliquez sur une cellule pour voir un nuage de points avec des symboles colorés par groupe (dans cet exemple, le nombre de cylindres, 4 est rouge, 6 est vert et 8 est bleu). Le survol des points du nuage de points donne le nom de la ligne (dans ce cas, la marque de la voiture).
Réponses:
Rapide, sale et approximatif:
la source
Ressemble plutôt "moins", mais vaut la peine d'être vérifié (car il donne plus d'informations visuelles):
Ellipses de la matrice de corrélation : les cercles de la matrice de corrélation :
Veuillez trouver plus d'exemples dans la vignette corrplot référencée par @assylias ci-dessous.
la source
ellipse:plotcorr
.Très facile avec lattice :: levelplot:
la source
La bibliothèque ggplot2 peut gérer cela avec
geom_tile()
. Il semble que ce graphique ci-dessus ait pu être redimensionné, car il n'y a pas de corrélations négatives, alors prenez cela en considération avec vos données. Utilisation dumtcars
jeu de données:MODIFIER :
permet de spécifier la couleur du point médian et le blanc par défaut peut donc être un bon ajustement ici. D'autres options peuvent être trouvées sur le site Web de ggplot ici et ici .
la source
c(-1, -0.6, -0.3, 0, 0.3, 0.6, 1)
avec"white"
au milieu pour laisser les couleurs refléter la symétrie de la corrélation efficace.scale_fill_gradient2()
la fonctionnalité que vous décrivez soit obtenue automatiquement. Je ne savais pas que cela existait.p <- ggplot(.....) + ... + ....; library(plotly); ggplotly(p)
le rendra interactifX1
utiliser:z.m$X1 <- factor(z.m$X1, levels = rev(levels( z.m$X1 )))
Utilisez le package corrplot:
Par exemple:
OMI plutôt élégante
la source
Ce type de graphique est appelé une "carte thermique" entre autres termes. Une fois que vous avez votre matrice de corrélation, tracez-la à l'aide de l'un des différents didacticiels disponibles.
Utilisation des graphiques de base: http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/
En utilisant ggplot2: http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/
la source
J'ai travaillé sur quelque chose de similaire à la visualisation publiée par @daroczig, avec du code posté par @Ulrik en utilisant la
plotcorr()
fonction duellipse
package. J'aime l'utilisation des ellipses pour représenter les corrélations et l'utilisation des couleurs pour représenter les corrélations négatives et positives. Cependant, je voulais que les couleurs accrocheuses se démarquent pour les corrélations proches de 1 et -1, pas pour celles proches de 0.J'ai créé une alternative dans laquelle des ellipses blanches sont superposées sur des cercles colorés. Chaque ellipse blanche est dimensionnée de telle sorte que la proportion du cercle coloré visible derrière elle est égale à la corrélation au carré. Lorsque la corrélation est proche de 1 et -1, l'ellipse blanche est petite et une grande partie du cercle coloré est visible. Lorsque la corrélation est proche de 0, l'ellipse blanche est grande et une petite partie du cercle coloré est visible.
La fonction,
plotcor()
est disponible à l' adresse https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.r .Un exemple du graphique résultant utilisant l'
mtcars
ensemble de données est présenté ci-dessous.la source
Je me rends compte que cela fait un moment, mais les nouveaux lecteurs pourraient être intéressés
rplot()
par lecorrr
package ( https://cran.rstudio.com/web/packages/corrr/index.html ), qui peut produire les types de parcelles que @daroczig mentionne , mais concevoir une approche de pipeline de données:la source
La fonction corrplot () du package corrplot R peut également être utilisée pour tracer un corrélogramme.
plusieurs articles décrivant comment calculer et visualiser la matrice de corrélation sont publiés ici:
la source
Une autre solution que j'ai récemment découverte est une carte thermique interactive créée avec le package qtlcharts .
Vous trouverez ci-dessous une image statique du graphique résultant.
Vous pouvez voir la version interactive sur mon blog . Passez la souris sur la carte thermique pour voir les valeurs de ligne, de colonne et de cellule. Cliquez sur une cellule pour voir un nuage de points avec des symboles colorés par groupe (dans cet exemple, le nombre de cylindres, 4 est rouge, 6 est vert et 8 est bleu). Le survol des points du nuage de points donne le nom de la ligne (dans ce cas, la marque de la voiture).
la source
Comme je ne peux pas commenter, je dois donner mon 2c à la réponse de Daroczig en guise de réponse ...
Le nuage de points ellipse est en effet issu du package ellipse et généré avec:
(à partir de la page de manuel)
Le paquet corrplot peut également - comme suggéré - être utile avec de jolies images trouvées ici
la source