1
2
3
4
5
6
# install.packages("corrplot")
library(corrplot)
# 计算相关性矩阵
M<-cor(mtcars)
dim(M)
# [1] 11 11

1、可视化R系数方式

  • method参数提供了如下6种可视化方式
  • circle(default), square, ellipse, number, shade, color, pie
1
corrplot(M, method="ellipse")
image-20230401114538351

2、对称布局方式

  • type参数提供了如下3种布局方式
  • full(default), upper, lower
1
corrplot(M, type="lower")
image-20230401114629730

3、样本排序

  • order参数提供了如下
  • original(default), AOE, FPC, hclust, alphabet
  • 如果采用hclust,可以通过hclust.method参数设置聚类方法
1
corrplot(M, order="hclust")
image-20230401114956459

4、颜色方案

  • (1)相关性颜色
1
2
3
col = colorRampPalette(c("blue", "white", "red"))(20) # 连续型
col = RColorBrewer::brewer.pal(n=8, name="RdBu") #离散型
corrplot(M, col=col)
  • (2)其它颜色
1
2
3
4
5
# 背景填充颜色
corrplot(M, bg="grey")

# 方格边框颜色
corrplot(M, addgrid.col = "black")

5、文本属性设置

  • (1)坐标轴名:通过tl.系列参数设置大小,颜色、角度等
1
corrplot(M, tl.col="black", tl.srt=45)
  • (2)标注相关性系数
1
corrplot(M, addCoef.col = "black", number.digits = 1)
image-20230401115659231
  • (3)标注P值
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
## 首先得到P值矩阵
cor.mtest <- function(mat, ...) {
    mat <- as.matrix(mat)
    n <- ncol(mat)
    p.mat<- matrix(NA, n, n)
    diag(p.mat) <- 0
    for (i in 1:(n - 1)) {
        for (j in (i + 1):n) {
            tmp <- cor.test(mat[, i], mat[, j], ...)
            p.mat[i, j] <- p.mat[j, i] <- tmp$p.value
        }
    }
  colnames(p.mat) <- rownames(p.mat) <- colnames(mat)
  p.mat
}
p.mat <- cor.mtest(mtcars)
dim(p.mat)
# [1] 11 11
  • sig.level 参数设置显著阈值
  • insig参数设置标注方式,可选项包括
    • pch(default):将不显著的,标注为叉
    • blank:将不显著的,不显示
    • n:不作处理
    • label_sig 将显著的,标注星号
1
corrplot(M, p.mat = p.mat, sig.level = 0.01, insig = "blank")
image-20230401145554687
1
2
3
corrplot(M, p.mat = p.mat, sig.level = c(0.1, 0.01), 
	insig = "label_sig",
	pch.cex = 1.5, pch.col = "red")
image-20230401145726873

6、其它参数

  • is.corr参数, 默认为TRUE;即输入矩阵是否为相关性矩阵
1
corrplot(scale(t(mtcars)), is.corr = FALSE)
image-20230401150411920
  • diag参数,默认为TRUE;即是否显示对角线的相关性
1
corrplot(M, diag=FALSE)
image-20230401150618944