查看原文
其他

corrplot包可视化相关矩阵详解

阿越就是我 医学和生信笔记 2023-02-25

关注公众号,发送R语言Python,获取学习资料!

  Stay hungry, stay foolish!   

相关性矩阵的可视化非常多,基础绘图也有很多函数可以做。不过最好用的一定是corrplot包。

这个包也是国产R包,以为大佬写的,非常值得学习。

corrplot非常容易使用,并在可视化方法、图形布局、颜色、图例、文本标签等方面提供了丰富的绘图参数。它还提供了p值和置信区间,以帮助用户确定相关的统计显著性。

corrplot一共提供了大约50个参数,但是常用的也就10个左右。非常简单易用哦。


  • 安装

  • 图形种类

  • 重排顺序

  • 加方框

  • 更改颜色条、图例、文本标签

  • 可视化非相关系数矩阵、NA值、数学符号

  • 可视化p值和可信区间


安装

# 2选1
install.packages('corrplot')

devtools::install_github('taiyun/corrplot', build_vignettes = TRUE)

图形种类

library(corrplot)
## corrplot 0.92 loaded

M <- cor(mtcars)
M
##             mpg        cyl       disp         hp        drat         wt
## mpg   1.0000000 -0.8521620 -0.8475514 -0.7761684  0.68117191 -0.8676594
## cyl  -0.8521620  1.0000000  0.9020329  0.8324475 -0.69993811  0.7824958
## disp -0.8475514  0.9020329  1.0000000  0.7909486 -0.71021393  0.8879799
## hp   -0.7761684  0.8324475  0.7909486  1.0000000 -0.44875912  0.6587479
## drat  0.6811719 -0.6999381 -0.7102139 -0.4487591  1.00000000 -0.7124406
## wt   -0.8676594  0.7824958  0.8879799  0.6587479 -0.71244065  1.0000000
## qsec  0.4186840 -0.5912421 -0.4336979 -0.7082234  0.09120476 -0.1747159
## vs    0.6640389 -0.8108118 -0.7104159 -0.7230967  0.44027846 -0.5549157
## am    0.5998324 -0.5226070 -0.5912270 -0.2432043  0.71271113 -0.6924953
## gear  0.4802848 -0.4926866 -0.5555692 -0.1257043  0.69961013 -0.5832870
## carb -0.5509251  0.5269883  0.3949769  0.7498125 -0.09078980  0.4276059
##             qsec         vs          am       gear        carb
## mpg   0.41868403  0.6640389  0.59983243  0.4802848 -0.55092507
## cyl  -0.59124207 -0.8108118 -0.52260705 -0.4926866  0.52698829
## disp -0.43369788 -0.7104159 -0.59122704 -0.5555692  0.39497686
## hp   -0.70822339 -0.7230967 -0.24320426 -0.1257043  0.74981247
## drat  0.09120476  0.4402785  0.71271113  0.6996101 -0.09078980
## wt   -0.17471588 -0.5549157 -0.69249526 -0.5832870  0.42760594
## qsec  1.00000000  0.7445354 -0.22986086 -0.2126822 -0.65624923
## vs    0.74453544  1.0000000  0.16834512  0.2060233 -0.56960714
## am   -0.22986086  0.1683451  1.00000000  0.7940588  0.05753435
## gear -0.21268223  0.2060233  0.79405876  1.0000000  0.27407284
## carb -0.65624923 -0.5696071  0.05753435  0.2740728  1.00000000

默认圆形,带红色标签的。

corrplot(M)
plot of chunk unnamed-chunk-3

图形展示方法参数:method,提供以下选项:circle, square, ellipse, number, shade, color, pie

看看不同的类型:

corrplot(M,method = "number")
plot of chunk unnamed-chunk-4
corrplot(M, method = 'color')
plot of chunk unnamed-chunk-5
corrplot(M, method = 'shade')
plot of chunk unnamed-chunk-6
corrplot(M, method = 'square', order = 'FPC', type = 'lower', diag = FALSE)
plot of chunk unnamed-chunk-7
corrplot(M, method = 'ellipse', order = 'AOE', type = 'upper')
plot of chunk unnamed-chunk-8

使用这个函数可以上下使用不同的图形类型。

corrplot.mixed(M, order = 'AOE')
plot of chunk unnamed-chunk-9

可以自由组合不用的类型:

corrplot.mixed(M, lower = 'shade', upper = 'pie', order = 'hclust')
plot of chunk unnamed-chunk-10

重排顺序

type参数控制是否显示上下三角。3个选项:full, lower, upper。

diagonal控制对角线是否显示:TRUE或者FALSE。

order参数控制顺序,提供5个选项:original(默认),AOE, FPC, hclust, alphabet。

具体每种方法的原理大家有兴趣的可以自己学习。

如果选hclust,还可以调整hclust.method()函数,有以下选项:ward, ward.D, ward.D2, single, complete, average, mcquitty, median,centroid

也可以通过corrMatOrder()函数手动安排顺序。

corrplot(M, order = 'hclust'
         addrect = 2 #增加方框
         )
plot of chunk unnamed-chunk-11
corrplot(M, method = 'square'
         diag = FALSE
         order = 'hclust',
         tl.pos = 'd'
         )
plot of chunk unnamed-chunk-12
corrplot(M, 
         method = "square",
         type = "lower",
         order = 'hclust',
         rect.col = 'blue', rect.lwd = 3# 控制方框外观
         tl.pos = 'd',
         tl.col = "black",
         cl.pos = "b"
         )
plot of chunk unnamed-chunk-13

加方框

corrplot(M,
         addrect = 3# 增加方框
         rect.col = 'blue', rect.lwd = 3# 控制方框外观
         )
plot of chunk unnamed-chunk-14

还可以通过管道符加边框:

corrplot(M) |> corrRect(c(136))
plot of chunk unnamed-chunk-15

也可以用名字限定方框添加位置:

corrplot(M, order = 'hclust') |>
  corrRect(name = c('carb''qsec''mpg')) # 名字和边框的位置大家观察下
plot of chunk unnamed-chunk-16

还可以用名字组成位置,在你喜欢的位置添加方框:

分别对应方框的上、左、下、右四个位置。

r = rbind(c('wt''hp''cyl''disp'),
          c('drat''mpg''gear''gear'))
corrplot(M, order = 'hclust') |> corrRect(namesMat = r)
plot of chunk unnamed-chunk-17

更改颜色条、图例、文本标签

使用COL1()产生连续型颜色,使用COL2()产生离散型颜色。COL1()适用于只有正值或只有负值的矩阵,COL2()适合于既有正数又有负数的矩阵。

  • col参数调整颜色,col.lim参数使颜色均匀分布,is.corr参数使用TRUE或者FALSE控制是否是相关矩阵,默认是TRUE。

下面是可供选择的颜色条:

image-20220408210622681
image-20220408210649606
  • cl.pos控制颜色条(color legend)位置,提供以下选项:FALSE,r(right),b(bottom),n(不显示)。
  • cl.ratio控制颜色条的宽度,建议是0.1~0.2。

还有很多参数可以控制颜色条的外观,都是以cl开头的,大家可以通过?corrplot查看具体参数。

  • tl.pos:标签的位置,必须是以下中的一种:lt, ld, td, d,n

lt:type = full的情况下的默认选项,表示left and top。ld:type = lower的情况下的默认选项,表示left and diagonal。td:type = upper的情况下的默认选项,表示top and diagonal。l:left d:diagonal n:不添加标签

  • tl.cex:标签文本字体大小
  • tl.srt:旋转角度
corrplot(M, order = 'AOE', col = COL2('RdBu'10))
plot of chunk unnamed-chunk-18
corrplot(M, order = 'AOE'
         addCoef.col = 'black'# 性关系数文字颜色
         tl.pos = 'd',
         cl.pos = 'n', col = COL2('PiYG'))
plot of chunk unnamed-chunk-19
corrplot(M, method = 'square', order = 'AOE', addCoef.col = 'black', tl.pos = 'd', cl.pos = 'n', col = COL2('BrBG'))
plot of chunk unnamed-chunk-20

标签旋转45°:

corrplot(M, type = 'lower', order = 'hclust', tl.col = 'black', cl.ratio = 0.2, tl.srt = 45, col = COL2('PuOr'10))
plot of chunk unnamed-chunk-21

移除图例,增加背景色,看起来就是一个棋盘:

corrplot(M, order = 'AOE', cl.pos = 'n', tl.pos = 'n',
         col = c('white''black'), bg = 'gold2')
plot of chunk unnamed-chunk-22

可视化非相关系数矩阵、NA值、数学符号

N1 = matrix(runif(802026), 8)
dim(N1)
## [1]  8 10

corrplot(N1, is.corr = FALSE, col.lim = c(2030), method = 'color', tl.pos = 'n',
         col = COL1('YlGn'), cl.pos = 'b'
         addgrid.col = 'red'# 边框色
         addCoef.col = 'grey50'# 相关系数颜色
         number.cex = 0.8 # 相关系数字体大小
         )
plot of chunk unnamed-chunk-23

有正值也有负值:

N2 = matrix(runif(80, -1510), 8)
corrplot(N2, is.corr = FALSE, method = 'color', col.lim = c(-1510), tl.pos = 'n',col = COL2('PiYG'), cl.pos = 'b', addCoef.col = 'grey50')
plot of chunk unnamed-chunk-24

标签为NA和数学公式,NA默认会显示为?,可以使用na.label参数。

M2 = M
diag(M2) = NA
colnames(M2) = rep(c('$alpha+beta''$alpha[0]''$alpha[beta]'),c(443))
rownames(M2) = rep(c('$Sigma[i]^n''$sigma',  '$alpha[0]^100''$alpha[beta]'),c(2423))
corrplot(10*abs(M2), is.corr = FALSE, col.lim = c(010), tl.cex = 1.5)
plot of chunk unnamed-chunk-25
M2 = M
diag(M2) = NA
colnames(M2) = rep(c('$alpha+beta''$alpha[0]''$alpha[beta]'), c(443))
rownames(M2) = rep(c('$Sigma[i]^n''$sigma',  '$alpha[0]^100''$alpha[beta]'), c(2423))
corrplot(10*abs(M2), is.corr = FALSE, col.lim = c(010), tl.cex = 1.5, tl.col = "black", na.label = "ab"
         )
plot of chunk unnamed-chunk-26

可视化p值和可信区间

在可视化相关系数矩阵时,也可以同时展示p值信息和可信区间信息。

testRes = cor.mtest(mtcars, conf.level = 0.95)
testRes
## $p
##               mpg          cyl         disp           hp         drat
## mpg  0.000000e+00 6.112687e-10 9.380327e-10 1.787835e-07 1.776240e-05
## cyl  6.112687e-10 0.000000e+00 1.802838e-12 3.477861e-09 8.244636e-06
## disp 9.380327e-10 1.802838e-12 0.000000e+00 7.142679e-08 5.282022e-06
## hp   1.787835e-07 3.477861e-09 7.142679e-08 0.000000e+00 9.988772e-03
## drat 1.776240e-05 8.244636e-06 5.282022e-06 9.988772e-03 0.000000e+00
## wt   1.293959e-10 1.217567e-07 1.222320e-11 4.145827e-05 4.784260e-06
## qsec 1.708199e-02 3.660533e-04 1.314404e-02 5.766253e-06 6.195826e-01
## vs   3.415937e-05 1.843018e-08 5.235012e-06 2.940896e-06 1.167553e-02
## am   2.850207e-04 2.151207e-03 3.662114e-04 1.798309e-01 4.726790e-06
## gear 5.400948e-03 4.173297e-03 9.635921e-04 4.930119e-01 8.360110e-06
## carb 1.084446e-03 1.942340e-03 2.526789e-02 7.827810e-07 6.211834e-01
##                wt         qsec           vs           am         gear
## mpg  1.293959e-10 1.708199e-02 3.415937e-05 2.850207e-04 5.400948e-03
## cyl  1.217567e-07 3.660533e-04 1.843018e-08 2.151207e-03 4.173297e-03
## disp 1.222320e-11 1.314404e-02 5.235012e-06 3.662114e-04 9.635921e-04
## hp   4.145827e-05 5.766253e-06 2.940896e-06 1.798309e-01 4.930119e-01
## drat 4.784260e-06 6.195826e-01 1.167553e-02 4.726790e-06 8.360110e-06
## wt   0.000000e+00 3.388683e-01 9.798492e-04 1.125440e-05 4.586601e-04
## qsec 3.388683e-01 0.000000e+00 1.029669e-06 2.056621e-01 2.425344e-01
## vs   9.798492e-04 1.029669e-06 0.000000e+00 3.570439e-01 2.579439e-01
## am   1.125440e-05 2.056621e-01 3.570439e-01 0.000000e+00 5.834043e-08
## gear 4.586601e-04 2.425344e-01 2.579439e-01 5.834043e-08 0.000000e+00
## carb 1.463861e-02 4.536949e-05 6.670496e-04 7.544526e-01 1.290291e-01
##              carb
## mpg  1.084446e-03
## cyl  1.942340e-03
## disp 2.526789e-02
## hp   7.827810e-07
## drat 6.211834e-01
## wt   1.463861e-02
## qsec 4.536949e-05
## vs   6.670496e-04
## am   7.544526e-01
## gear 1.290291e-01
## carb 0.000000e+00
## 
## $lowCI
##              mpg        cyl        disp         hp       drat          wt
## mpg   1.00000000 -0.9257694 -0.92335937 -0.8852686  0.4360484 -0.93382641
## cyl  -0.92576936  1.0000000  0.80724418  0.6816016 -0.8429083  0.59657947
## disp -0.92335937  0.8072442  1.00000000  0.6106794 -0.8487237  0.78115863
## hp   -0.88526861  0.6816016  0.61067938  1.0000000 -0.6895522  0.40251134
## drat  0.43604838 -0.8429083 -0.84872374 -0.6895522  1.0000000 -0.84997951
## wt   -0.93382641  0.5965795  0.78115863  0.4025113 -0.8499795  1.00000000
## qsec  0.08195487 -0.7792781 -0.67961513 -0.8475998 -0.2659470 -0.49335358
## vs    0.41036301 -0.9039393 -0.84883771 -0.8559675  0.1081948 -0.75711174
## am    0.31755830 -0.7369979 -0.77926901 -0.5456270  0.4843991 -0.83867523
## gear  0.15806177 -0.7180260 -0.75751468 -0.4544774  0.4641440 -0.77446381
## carb -0.75464796  0.2184331  0.05367539  0.5431200 -0.4259976  0.09273981
##             qsec         vs         am        gear        carb
## mpg   0.08195487  0.4103630  0.3175583  0.15806177 -0.75464796
## cyl  -0.77927809 -0.9039393 -0.7369979 -0.71802597  0.21843307
## disp -0.67961513 -0.8488377 -0.7792690 -0.75751468  0.05367539
## hp   -0.84759984 -0.8559675 -0.5456270 -0.45447743  0.54311998
## drat -0.26594700  0.1081948  0.4843991  0.46414402 -0.42599760
## wt   -0.49335358 -0.7571117 -0.8386752 -0.77446381  0.09273981
## qsec  1.00000000  0.5346428 -0.5356240 -0.52261830 -0.81780480
## vs    0.53464277  1.0000000 -0.1915957 -0.15371324 -0.76613289
## am   -0.53562398 -0.1915957  1.0000000  0.61589632 -0.29712041
## gear -0.52261830 -0.1537132  0.6158963  1.00000000 -0.08250603
## carb -0.81780480 -0.7661329 -0.2971204 -0.08250603  1.00000000
## 
## $uppCI
##             mpg        cyl       disp         hp       drat         wt
## mpg   1.0000000 -0.7163171 -0.7081376 -0.5860994  0.8322010 -0.7440872
## cyl  -0.7163171  1.0000000  0.9514607  0.9154223 -0.4646481  0.8887052
## disp -0.7081376  0.9514607  1.0000000  0.8932775 -0.4805193  0.9442902
## hp   -0.5860994  0.9154223  0.8932775  1.0000000 -0.1186280  0.8192573
## drat  0.8322010 -0.4646481 -0.4805193 -0.1186280  1.0000000 -0.4839784
## wt   -0.7440872  0.8887052  0.9442902  0.8192573 -0.4839784  1.0000000
## qsec  0.6696186 -0.3055388 -0.1001493 -0.4774331  0.4263400  0.1852649
## vs    0.8223262 -0.6442689 -0.4808327 -0.5006318  0.6839680 -0.2556982
## am    0.7844520 -0.2126675 -0.3055178  0.1152646  0.8501319 -0.4532461
## gear  0.7100628 -0.1738615 -0.2565810  0.2332119  0.8427222 -0.2944887
## carb -0.2503183  0.7397479  0.6536467  0.8708249  0.2663358  0.6755700
##            qsec         vs         am       gear       carb
## mpg   0.6696186  0.8223262  0.7844520  0.7100628 -0.2503183
## cyl  -0.3055388 -0.6442689 -0.2126675 -0.1738615  0.7397479
## disp -0.1001493 -0.4808327 -0.3055178 -0.2565810  0.6536467
## hp   -0.4774331 -0.5006318  0.1152646  0.2332119  0.8708249
## drat  0.4263400  0.6839680  0.8501319  0.8427222  0.2663358
## wt    0.1852649 -0.2556982 -0.4532461 -0.2944887  0.6755700
## qsec  1.0000000  0.8679076  0.1291876  0.1469065 -0.3988165
## vs    0.8679076  1.0000000  0.4883712  0.5175379 -0.2756654
## am    0.1291876  0.4883712  1.0000000  0.8949546  0.3982389
## gear  0.1469065  0.5175379  0.8949546  1.0000000  0.5684422
## carb -0.3988165 -0.2756654  0.3982389  0.5684422  1.0000000

corrplot(M, p.mat = testRes$p, sig.level = 0.10# 显著性水平,默认0.05
         order = 'hclust', addrect = 2)
plot of chunk unnamed-chunk-27

不显著的留空,显著的标注相关系数:

通过insig参数控制,有以下选项:pch(默认),p-value, blank, n, label_sig。

corrplot(M, p.mat = testRes$p, # p值矩阵
         method = 'circle', type = 'lower'
         insig='blank'# 不显著留空
         addCoef.col ='black'
         number.cex = 0.8, order = 'AOE', diag=FALSE)
plot of chunk unnamed-chunk-28

不显著的显示p值:

corrplot(M, p.mat = testRes$p, insig = 'p-value')
plot of chunk unnamed-chunk-29

所有的都显示p值:

corrplot(M, p.mat = testRes$p, insig = 'p-value', sig.level = -1)
plot of chunk unnamed-chunk-30

显著的标星号:

corrplot(M, p.mat = testRes$p, method = 'color', diag = FALSE, type = 'upper', sig.level = c(0.0010.010.05), pch.cex = 0.9, insig = 'label_sig', pch.col = 'grey20', order = 'AOE')
plot of chunk unnamed-chunk-31

可视化可信区间:

corrplot(M, lowCI = testRes$lowCI, uppCI = testRes$uppCI, 
         order = 'hclust'
         tl.pos = 'd', rect.col = 'navy'
         plotCI = 'rect'# 画可信区间,或者n
         cl.pos = 'n')
plot of chunk unnamed-chunk-32
corrplot(M, p.mat = testRes$p, lowCI = testRes$lowCI, 
         uppCI = testRes$uppCI,
         order = 'hclust',
         addrect = 3, rect.col = 'navy', plotCI = 'rect', cl.pos = 'n')
plot of chunk unnamed-chunk-33

OK,以上就是corrplot包的全部内容,基本上能够满足大家的日常需求,还有更多细节需要调整的话,可以使用?corrplot进行探索哦!

这个包是无数个可视化相关系数矩阵的包的鼻祖,很多包都是以这个包为基础的,已经足够好用了。




以上就是今天的内容,希望对你有帮助哦!欢迎点赞、在看、关注、转发

欢迎在评论区留言或直接添加我的微信!

 
End



欢迎关注公众号:医学和生信笔记

医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!


往期回顾

ggplot2变成Graphpad Prism样式:ggprism(01)


ggplot2变成Graphpad Prism样式:ggprism(02)


ggplot2变成Graphpad Prism样式:ggprism(03)


ggplot2变成Graphpad Prism样式:ggprims(04)


ggplot2变成Graphpad Prism样式:ggprims(05)


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存