其他
R语言制作相关图
R语言制作相关图
这篇文章是一个英文教程的搬运和整理,前几天在论文中看到了非常漂亮的相关图(correlogram),可以通过这个画出来。相关图可以非常好的表现数据表中的各个变量之间的相关关系。在相关图中,相关系数(correlation coefficients) 根据不同的值赋予了不同的颜色,相关矩阵(correlation matrix) 可以根据不同变量间的关系表现出来。在这里使用了R语言中的corrplot包。
安装corrplot包
要想在R语言中绘制相关图,需要先安装R包。在这里使用的是“corrplot”包,具体的R语言安装介绍请看前面的推文R语言安装部署基础。
准备数据
实验数据使用的是R语言中经典的mtcars
head(mtcars)
计算相关矩阵
M<-cor(mtcars) #计算相关
head(round(M,2)) #保留两位小数
相关图:可视化相关矩阵
使用R语言corrplot函数即可实现相关图的绘制。语法如下:
corrplot(corr, method="circle")
参数 | 介绍 |
---|---|
corr | 用来绘图的相关矩阵 |
method | 可视化方式,可以为圆、颜色、数字等等 |
不同的可视化方法
总共七种:方法分别为:“circle”, “square”, “ellipse”, “number”, “shade”, “color”, “pie”.
library(corrplot)
corrplot(M, method="circle")
corrplot(M, method="pie")
corrplot(M, method="color")
corrplot(M, method="number")
相关图的排版
相关图有三种排版方式:
“full”,默认的,显示完整的相关矩阵 "upper"显示上三角相关矩阵 "lower"显示下三角相关矩阵
corrplot(M, type="upper")
corrplot(M, method = "color",type="lower")
重新排列相关矩阵
相关矩阵可以根据相关系数进行重新排列,这对于发现矩阵中的结构特点是非常重要的。“hclust”可以使用层次聚类法进行排布。
corrplot(M, method = "color",type="upper", order="hclust")
# 使用不同的色彩
col<- colorRampPalette(c("red", "white", "blue"))(20)
corrplot(M, type="upper", order="hclust", col=col)
# 将背景改为浅蓝色
corrplot(M, type="upper", order="hclust", bg="lightblue")
分级设色
相关图的颜色可以自定义。使用RcolorBrewer包可以进行调色,并分级设色。
library(RColorBrewer)
corrplot(M, type="upper", order="hclust",
col=brewer.pal(n=8, name="RdBu"))
这个颜色的详细信息可以从配色网站查询:
https://tidyfriday.cn/colors/#type=sequential&scheme=BuGn&n=3 https://colorbrewer2.org/
第一个是国内的,不过网站不太稳定,打开比较慢;第二个是国外的,需要翻墙,否则显示不全。
改变标注的颜色和方向
使用tl.col参数控制坐标轴标注颜色,使用tl.srt控制坐标轴标注旋转方向
corrplot(M, type="upper", order="hclust", tl.col="black", tl.srt=45)
給相关图添加显著性检验
计算相关的p值
计算相关的p值矩阵,代码如下:
# mat : 数据的矩阵
#自定义了cor.mtest函数
# ... : further arguments to pass to the native R cor.test function
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
}
# matrix of the p-value of the correlation
p.mat <- cor.mtest(mtcars)
head(p.mat[, 1:5])
给相关图添加显著性
# Specialized the insignificant value according to the significant level
corrplot(M, type="upper", order="hclust",
p.mat = p.mat, sig.level = 0.01)
# Leave blank on no significant coefficient
corrplot(M, type="upper", order="hclust",
p.mat = p.mat, sig.level = 0.01, insig = "blank")
自定义相关图
col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))
corrplot(M, method="color", col=col(200),
type="upper", order="hclust",
addCoef.col = "black", # Add coefficient of correlation
tl.col="black", tl.srt=45, #Text label color and rotation
# 添加显著性
p.mat = p.mat, sig.level = 0.01, insig = "blank",
# hide correlation coefficient on the principal diagonal
diag=FALSE
)
参考文献
http://www.sthda.com/english/wiki/visualize-correlation-matrix-using-correlogram#introduction https://colorbrewer2.org/ https://cran.r-project.org/web/packages/corrplot/index.html