簡體   English   中英

Plot相關矩陣成圖

[英]Plot correlation matrix into a graph

我有一個帶有一些相關值的矩陣。 現在我想 plot 在一個看起來或多或少像這樣的圖表中:

在此處輸入圖像描述

我怎樣才能做到這一點?

相當“少”的樣子,但值得檢查(因為提供了更多的視覺信息):

相關矩陣橢圓相關矩陣橢圓 相關矩陣圓相關矩陣圓

請在下面@assylias引用的corrplot 小插圖中找到更多示例。

快速,骯臟,並且在球場上:

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

在此處輸入圖片說明

使用lattice::levelplot很容易:

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

在此處輸入圖片說明

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 網站這里這里找到

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

例如:

在此處輸入圖片說明

相當優雅的海事組織

這種類型的圖表在其他術語中被稱為“熱圖”。 獲得相關矩陣后,請使用各種教程之一繪制它。

使用基本圖形: 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/

我一直在研究類似於@daroczig 發布的可視化的東西,@Ulrik 使用ellipse包的plotcorr()函數發布了代碼。 我喜歡使用橢圓來表示相關性,以及使用顏色來表示負相關和正相關。 然而,我希望引人注目的顏色在接近 1 和 -1 的相關性時脫穎而出,而不是那些接近 0 的相關性。

我創建了一個替代方案,其中白色橢圓覆蓋在彩色圓圈上。 每個白色橢圓的大小都經過調整,使其后面可見的彩色圓圈的比例等於相關性的平方。 當相關性接近 1 和 -1 時,白色橢圓很小,並且可以看到大部分彩色圓圈。 當相關性接近 0 時,白色橢圓很大,幾乎看不到彩色圓圈。

函數plotcor()可在https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.r 獲得

下面顯示了使用mtcars數據集的結果圖示例。

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

調用 plotcor() 函數的結果

我意識到已經有一段時間了,但新讀者可能對corrr包( https://cran.rstudio.com/web/packages/corrr/index.html )中的rplot()感興趣,它可以產生各種各樣的繪圖@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)

在此處輸入圖片說明

corrplot R 包中corrplot()函數也可用於繪制相關圖。

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

此處發布了幾篇描述如何計算和可視化相關矩陣的文章:

我最近了解到的另一個解決方案是使用qtlcharts包創建的交互式熱圖。

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

下面是結果圖的靜態圖像。 在此處輸入圖片說明

你可以在我的博客上看到交互式版本。 將鼠標懸停在熱圖上以查看行、列和單元格值。 單擊一個單元格以查看帶有按組着色的符號的散點圖(在此示例中,圓柱體的數量,4 是紅色,6 是綠色,8 是藍色)。 將鼠標懸停在散點圖中的點上會給出行的名稱(在這種情況下是汽車的品牌)。

由於我無法發表評論,因此我必須將 daroczig 作為 anwser 的答案給出我的 2c ......

橢圓散點圖確實來自橢圓包並使用以下方法生成:

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

(來自手冊頁)

corrplot 包也可能 - 正如建議的那樣 - 對在這里找到的漂亮圖像很有用

這是分層聚類熱圖(帶有樹狀圖)的教科書示例。 使用gplots heatmap.2因為它優於基礎熱圖,但想法是一樣的。 colorRampPalette有助於生成 50 種(過渡)顏色。

library(gplots)

heatmap.2(cor(mtcars), trace="none", col=colorRampPalette(c("blue2","white","red3"))(50))

heatmap.2 相關值 藍色 白色 紅色

另一種選擇是使用GGally package 和ggcorr function,如下所示:

library(GGally)
ggcorr(mtcars, method = c("everything", "pearson"), label = TRUE)

ggcorr(mtcars, method = c("everything", "pearson"), label = TRUE, geom = "circle")

使用reprex v2.0.2創建於 2022-08-20

檢查上面的鏈接以獲取更多選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM