• corrplot包画相关性图详解


    获取更多R语言知识,请关注公众号:医学和生信笔记

    医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化。主要分享R语言做医学统计学、meta分析、网络药理学、临床预测模型、机器学习、生物信息学等。


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

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

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

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

    安装

    # 2选1
    install.packages('corrplot')
    
    devtools::install_github('taiyun/corrplot', build_vignettes = TRUE)
    
    • 1
    • 2
    • 3
    • 4

    图形种类

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

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

    corrplot(M)
    
    • 1

    plot of chunk unnamed-chunk-3

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

    看看不同的类型:

    corrplot(M,method = "number")
    
    • 1

    plot of chunk unnamed-chunk-4

    corrplot(M, method = 'color')
    
    • 1

    plot of chunk unnamed-chunk-5

    corrplot(M, method = 'shade')
    
    • 1

    plot of chunk unnamed-chunk-6

    corrplot(M, method = 'square', order = 'FPC', type = 'lower', diag = FALSE)
    
    • 1

    plot of chunk unnamed-chunk-7

    corrplot(M, method = 'ellipse', order = 'AOE', type = 'upper')
    
    • 1

    plot of chunk unnamed-chunk-8

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

    corrplot.mixed(M, order = 'AOE')
    
    • 1

    plot of chunk unnamed-chunk-9

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

    corrplot.mixed(M, lower = 'shade', upper = 'pie', order = 'hclust')
    
    • 1

    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 #增加方框
             )
    
    • 1
    • 2
    • 3

    plot of chunk unnamed-chunk-11

    corrplot(M, method = 'square', 
             diag = FALSE, 
             order = 'hclust',
             tl.pos = 'd'
             )
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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"
             )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    plot of chunk unnamed-chunk-13

    加方框

    corrplot(M,
             addrect = 3, # 增加方框
             rect.col = 'blue', rect.lwd = 3# 控制方框外观
             )
    
    • 1
    • 2
    • 3
    • 4

    plot of chunk unnamed-chunk-14

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

    corrplot(M) |> corrRect(c(1, 3, 6))
    
    • 1

    plot of chunk unnamed-chunk-15

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

    corrplot(M, order = 'hclust') |>
      corrRect(name = c('carb', 'qsec', 'mpg')) # 名字和边框的位置大家观察下
    
    • 1
    • 2

    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)
    
    • 1
    • 2
    • 3

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

    plot of chunk unnamed-chunk-18

    corrplot(M, order = 'AOE', 
             addCoef.col = 'black', # 性关系数文字颜色
             tl.pos = 'd',
             cl.pos = 'n', col = COL2('PiYG'))
    
    • 1
    • 2
    • 3
    • 4

    plot of chunk unnamed-chunk-19

    corrplot(M, method = 'square', order = 'AOE', addCoef.col = 'black', tl.pos = 'd', cl.pos = 'n', col = COL2('BrBG'))
    
    • 1

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

    plot of chunk unnamed-chunk-21

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

    corrplot(M, order = 'AOE', cl.pos = 'n', tl.pos = 'n',
             col = c('white', 'black'), bg = 'gold2')
    
    • 1
    • 2

    plot of chunk unnamed-chunk-22

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

    N1 = matrix(runif(80, 20, 26), 8)
    dim(N1)
    ## [1]  8 10
    
    corrplot(N1, is.corr = FALSE, col.lim = c(20, 30), method = 'color', tl.pos = 'n',
             col = COL1('YlGn'), cl.pos = 'b', 
             addgrid.col = 'red', # 边框色
             addCoef.col = 'grey50', # 相关系数颜色
             number.cex = 0.8 # 相关系数字体大小
             )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    plot of chunk unnamed-chunk-23

    有正值也有负值:

    N2 = matrix(runif(80, -15, 10), 8)
    corrplot(N2, is.corr = FALSE, method = 'color', col.lim = c(-15, 10), tl.pos = 'n',col = COL2('PiYG'), cl.pos = 'b', addCoef.col = 'grey50')
    
    • 1
    • 2

    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(4, 4, 3))
    rownames(M2) = rep(c('$Sigma[i]^n', '$sigma',  '$alpha[0]^100', '$alpha[beta]'),c(2, 4, 2, 3))
    corrplot(10*abs(M2), is.corr = FALSE, col.lim = c(0, 10), tl.cex = 1.5)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    plot of chunk unnamed-chunk-25

    M2 = M
    diag(M2) = NA
    colnames(M2) = rep(c('$alpha+beta', '$alpha[0]', '$alpha[beta]'), c(4, 4, 3))
    rownames(M2) = rep(c('$Sigma[i]^n', '$sigma',  '$alpha[0]^100', '$alpha[beta]'), c(2, 4, 2, 3))
    corrplot(10*abs(M2), is.corr = FALSE, col.lim = c(0, 10), tl.cex = 1.5, tl.col = "black", na.label = "ab"
             )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    plot of chunk unnamed-chunk-28

    不显著的显示p值:

    corrplot(M, p.mat = testRes$p, insig = 'p-value')
    
    • 1

    plot of chunk unnamed-chunk-29

    所有的都显示p值:

    corrplot(M, p.mat = testRes$p, insig = 'p-value', sig.level = -1)
    
    • 1

    plot of chunk unnamed-chunk-30

    显著的标星号:

    corrplot(M, p.mat = testRes$p, method = 'color', diag = FALSE, type = 'upper', sig.level = c(0.001, 0.01, 0.05), pch.cex = 0.9, insig = 'label_sig', pch.col = 'grey20', order = 'AOE')
    
    • 1

    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')
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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')
    
    • 1
    • 2
    • 3
    • 4

    plot of chunk unnamed-chunk-33

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

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

    获取更多R语言知识,请关注公众号:医学和生信笔记

    医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化。主要分享R语言做医学统计学、meta分析、网络药理学、临床预测模型、机器学习、生物信息学等。

  • 相关阅读:
    HTML语义标签
    -bash: spawn: 未找到命令
    avalanche 少量tcp长连接持续构建HTTP请求测试
    Excel - 插入空白行
    Java访问Scala中的Int类型
    PCA降维可视化
    mongodb 基本概念
    基于JavaWeb的宿舍管理系统设计与实现
    [附源码]java毕业设计智慧教学平台
    nginx如何安装 以及nginx的配置文件
  • 原文地址:https://blog.csdn.net/Ayue0616/article/details/126107482