एक ग्राफ में प्लॉट सहसंबंध मैट्रिक्स


93

मेरे पास कुछ सहसंबंध मूल्यों के साथ एक मैट्रिक्स है। अब मैं उस ग्राफ को बनाना चाहता हूं जो कमोबेश उसी तरह दिखता है:

यहां छवि विवरण दर्ज करें

मैं उसे कैसे प्राप्त कर सकता हूं?


आपको यह समारोह दिलचस्प लग सकता है: gist.github.com/low-decarie/5886616 हालांकि इसमें अभी भी सुधार करने की आवश्यकता है ( stackoverflow.com/questions/17370853/… )
— एटिएन लो-डकार्की

@anon क्या आप इसके लिए कोड साझा कर सकते हैं? यह वही है जो मैं अपनी प्रस्तुति के लिए देख रहा हूं
— पावलोस पैंटलैडिस

जवाबों:


57

त्वरित, गंदा और बॉलपार्क में:

library(lattice)

#Build the horizontal and vertical axis information
hor <- c("214", "215", "216", "224", "211", "212", "213", "223", "226", "225")
ver <- paste("DM1-", hor, sep="")

#Build the fake correlation matrix
nrowcol <- length(ver)
cor <- matrix(runif(nrowcol*nrowcol, min=0.4), nrow=nrowcol, ncol=nrowcol, dimnames = list(hor, ver))
for (i in 1:nrowcol) cor[i,i] = 1

#Build the plot
rgb.palette <- colorRampPalette(c("blue", "yellow"), space = "rgb")
levelplot(cor, main="stage 12-14 array correlation matrix", xlab="", ylab="", col.regions=rgb.palette(120), cuts=100, at=seq(0,1,0.01))

यहां छवि विवरण दर्ज करें


2
यह ओपी (फोंट, रंग, लेआउट) से उदाहरण के समान दिखता है। लगता है कि मूल जाली के साथ भी बनाया गया था। शानदार विस्तृत जवाब, +1।
— मर्क

1
जवाब के लिए धन्यवाद। बहुत से लोगों का उपयोग सहसंबंध के भूखंडों के लिए किया जाता है, जिसमें विकर्ण 1-s से ऊपर से नीचे की ओर बाएँ दाएँ दाएँ वर्ग में होता है (प्रश्न में उदाहरण आकृति देखें), बजाय नीचे से बाएँ दाएँ दाएँ वर्ग में, जैसा कि आपके उपाय। इस समस्या को ठीक करने का तरीका यहां दिया गया है: cor_reversed <- लागू करें (cor, 2, Rev); levelplot (t (cor_reversed), ...)
— छोड़ें

@ Bill_080 अपने कोड को कॉपी-पेस्ट क्यों नहीं करेगा जो सहसंबंध मैट्रिक्स को प्रिंट करता है?
— पावलो पानलियाडिस

59

बल्कि "कम" जैसा दिखता है, लेकिन जाँच के लायक (अधिक दृश्य जानकारी देने के रूप में):

सहसंबंध मैट्रिक्स ellipses : सहसंबंध मैट्रिक्स ellipses सहसंबंध मैट्रिक्स हलकों : सहसंबंध मैट्रिक्स हलकों

कृपया नीचे @assylias द्वारा संदर्भित कॉरप्लेट विगनेट में और उदाहरण देखें।


1
साइट दोषपूर्ण लगती है। क्या आपके पास पहले प्लॉट के लिए कोई कोड या पैकेज विवरण है?
— उज्ज्वल-तारा

1
@TrevorAlexander: जहां तक ​​मुझे याद है, पहले प्लॉट द्वारा बनाया गया था ellipse:plotcorr।
— 12 फरवरी को दरोगिग

मैंने लिंक 1 के लिए एक संपादन प्रस्तुत किया है: में सुधार-visualisation.org/vis/id=250 जो समान छवि प्रदान करता है।
— रसैलपिएर्स

1
धन्यवाद @rpierce, हालांकि मुझे R स्रोत के बिना केवल छवि दिखाई देती है। मुझे यहाँ क्या याद आता है?
— daroczig


43

जाली के साथ बहुत आसान :: levelplot:

z <- cor(mtcars)
require(lattice)
levelplot(z)

यहां छवि विवरण दर्ज करें


30

Ggplot2 लाइब्रेरी इससे निपट सकती है geom_tile()। ऐसा लगता है कि ऊपर उस प्लॉट में कुछ रीकॉलिंग हुई होगी, क्योंकि कोई नकारात्मक सहसंबंध नहीं हैं, इसलिए अपने डेटा पर ध्यान दें। mtcarsडेटासेट का उपयोग करना :

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")

यहां छवि विवरण दर्ज करें

संपादित करें :

ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() + 
scale_fill_gradient2(low = "blue",  high = "yellow")

यहां छवि विवरण दर्ज करें

मिडपॉइंट के रंग को निर्दिष्ट करने की अनुमति देता है और यह सफेद में चूक जाता है इसलिए यहां एक अच्छा समायोजन हो सकता है। अन्य विकल्प यहाँ और यहाँ ggplot वेबसाइट पर देखे जा सकते हैं ।


अच्छा (+1)! (जैसे: हालांकि मैं एक मैनुअल ब्रेक पैमाने जोड़ना होगा c(-1, -0.6, -0.3, 0, 0.3, 0.6, 1)) के साथ "white"बीच में जाने के लिए रंग सहसंबंध कुशल की समरूपता को दर्शाते हैं।
— दरोगासीग

@ डारोजिग - अच्छी बात है। ऐसा लगता है कि scale_fill_gradient2()आपके द्वारा वर्णित कार्यक्षमता को स्वचालित रूप से प्राप्त करता है। मुझे नहीं पता था कि अस्तित्व में है।
— चेस

1
इसे जोड़ना: p <- ggplot(.....) + ... + ....; library(plotly); ggplotly(p)इसे अंतःक्रियात्मक बना देगा
— schlusie

विकर्ण 1 को ऊपर से नीचे दाईं ओर जाने के लिए, X1उपयोग करने के लिए कारक स्तरों के उत्क्रमण की आवश्यकता होती है :z.m$X1 <- factor(z.m$X1, levels = rev(levels( z.m$X1 )))
— arun

11

कॉरपोट पैकेज का उपयोग करें:

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")
}

उदाहरण के लिए:

यहां छवि विवरण दर्ज करें

बल्कि सुरुचिपूर्ण आई.एम.ओ.


9

उस प्रकार के ग्राफ को अन्य शब्दों के बीच "हीट मैप" कहा जाता है। एक बार जब आप अपना सहसंबंध मैट्रिक्स प्राप्त कर लेते हैं, तो वहाँ से बाहर विभिन्न ट्यूटोरियल में से एक का उपयोग करके इसे प्लॉट करें।

बेस ग्राफिक्स का उपयोग करना: http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/

Ggplot2 का उपयोग करना: http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/


मुझे यकीन नहीं है कि इसे 'हीटमैप' कहना काफी आधुनिक आविष्कार है। यह समझ में आता है कि अगर आप लाल-नारंगी-पीले रंग की योजना का उपयोग करके 'हॉटस्पॉट' दिखाने की कोशिश कर रहे हैं, लेकिन सामान्य तौर पर यह सिर्फ एक छवि की साजिश, या मैट्रिक्स की साजिश या एक रेखापुंज साजिश है। मैं सबसे पुराना संदर्भ ढूंढना चाहूंगा जो इसे 'हीटमैप' कहता है। tldr; "[उद्धरण वांछित]"
— 7

मुझे लगता है कि आप सही हैं कि गर्मी का नक्शा जरूरी नहीं कि इसके लिए जल्द से जल्द नाम हो। विकिपीडिया एक 1957 के पेपर को सूचीबद्ध करता है, लेकिन मैंने उस कागज की जाँच की और "हीट मैप" शब्द इसमें कहीं भी नहीं दिखता है (न ही ग्राफिक्स वर्तमान स्वरूप की तरह दिखते हैं)।
— अरी बी। फ्रीडमैन

5

मैं @daroczig द्वारा पोस्ट किए गए विज़ुअलाइज़ेशन के समान कुछ काम कर रहा हूं, जिसमें पैकेज के plotcorr()फ़ंक्शन का उपयोग करके @Ulrik द्वारा पोस्ट किया गया कोड है ellipse। मैं सहसंबंधों का प्रतिनिधित्व करने के लिए दीर्घवृत्त का उपयोग पसंद करता हूं, और नकारात्मक और सकारात्मक सहसंबंध का प्रतिनिधित्व करने के लिए रंगों का उपयोग करता हूं। हालाँकि, मैं चाहता था कि आंख को पकड़ने वाले रंग 1 और -1 के करीब सहसंबंधों के लिए खड़े हों, न कि उन 0 के करीब।

मैंने एक विकल्प तैयार किया, जिसमें रंगीन चक्रों पर सफेद दीर्घवृत्त दिखाई देते हैं। प्रत्येक सफ़ेद दीर्घवृत्त का आकार इतना होता है कि उसके पीछे दिखाई देने वाले रंगीन वृत्त का अनुपात वर्ग सहसंबंध के बराबर होता है। जब सहसंबंध 1 और -1 के पास होता है, तो सफेद दीर्घवृत्त छोटा होता है, और रंगीन सर्कल का अधिकांश भाग दिखाई देता है। जब सहसंबंध 0 के पास होता है, तो सफेद दीर्घवृत्त बड़ा होता है, और रंगीन चक्र का थोड़ा दृश्यमान होता है।

फ़ंक्शन, https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.rplotcor() पर उपलब्ध है ।

mtcarsडेटासेट का उपयोग करके परिणामी साजिश का एक उदाहरण नीचे दिखाया गया है।

library(plotrix)
library(seriation)
library(MASS)
plotcor(cor(mtcars), mar=c(0.1, 4, 4, 0.1))

प्लॉटकोर () फ़ंक्शन के लिए कॉल का परिणाम


3

मुझे पता है कि यह थोड़ी देर के लिए है, लेकिन नए पाठकों rplot()को corrrपैकेज ( https://cran.rstudio.com/web/packages/corrr/index.html ) से दिलचस्पी हो सकती है , जो प्लॉट के प्रकार का उत्पादन कर सकते हैं @daroczig उल्लेख , लेकिन एक डेटा पाइपलाइन दृष्टिकोण के लिए डिजाइन:

install.packages("corrr")
library(corrr)
mtcars %>% correlate() %>% rplot()

यहां छवि विवरण दर्ज करें

mtcars %>% correlate() %>% rearrange() %>% rplot()

यहां छवि विवरण दर्ज करें

mtcars %>% correlate() %>% rearrange() %>% rplot(shape = 15)

यहां छवि विवरण दर्ज करें

mtcars %>% correlate() %>% rearrange() %>% shave() %>% rplot(shape = 15)

यहां छवि विवरण दर्ज करें

mtcars %>% correlate() %>% rearrange(absolute = FALSE) %>% rplot(shape = 15)

यहां छवि विवरण दर्ज करें


2

Corrplot () से समारोह corrplot आर पैकेज भी एक correlogram प्लॉट करने के लिए इस्तेमाल किया जा सकता।

library(corrplot)  
M<-cor(mtcars) # compute correlation matrix
corrplot(M, method="circle")

सहसंबंध मैट्रिक्स की गणना और कल्पना करने का वर्णन करने वाले कई लेख यहां प्रकाशित किए गए हैं:


1

एक अन्य समाधान जो मैंने हाल ही में सीखा है, वह एक इंटरेक्टिव हीटमैप है जो कि क्यूटचर्ट्स पैकेज के साथ बनाया गया है।

install.packages("qtlcharts")
library(qtlcharts)
iplotCorr(mat=mtcars, group=mtcars$cyl, reorder=TRUE)

नीचे दिए गए भूखंड की एक स्थिर छवि है। यहां छवि विवरण दर्ज करें

आप पर इंटरैक्टिव संस्करण देख सकते हैं मेरे ब्लॉग । पंक्ति, स्तंभ और सेल मान देखने के लिए हीटमैप पर होवर करें। समूह द्वारा रंगीन प्रतीकों के साथ एक स्कैप्लेट को देखने के लिए एक सेल पर क्लिक करें (इस उदाहरण में, सिलेंडरों की संख्या 4 है, 4 लाल है, 6 हरा है, और 8 नीला है)। स्कैप्लेट में बिंदुओं पर मँडराकर पंक्ति का नाम देता है (इस मामले में कार का निर्माण)।


0

चूँकि मैं टिप्पणी नहीं कर सकता, मुझे अपना 2c उत्तर देना होगा awser के रूप में daroczig द्वारा ...

दीर्घवृत्त तितर बितर भूखंड वास्तव में दीर्घवृत्त पैकेज से है और इसके साथ उत्पन्न होता है:

corr.mtcars <- cor(mtcars)
ord <- order(corr.mtcars[1,])
xc <- corr.mtcars[ord, ord]
colors <- c("#A50F15","#DE2D26","#FB6A4A","#FCAE91","#FEE5D9","white",
            "#EFF3FF","#BDD7E7","#6BAED6","#3182BD","#08519C")   
plotcorr(xc, col=colors[5*xc + 6])

(मैन पेज से)

सुझाव के अनुसार - यहाँ दिए गए सुंदर चित्रों से उपयोगी हो सकता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.