查看原文
其他

R语言制作相关图

走天涯徐小洋 走天涯徐小洋地理数据科学 2022-05-17

R语言制作相关图

这篇文章是一个英文教程的搬运和整理,前几天在论文中看到了非常漂亮的相关图(correlogram),可以通过这个画出来。相关图可以非常好的表现数据表中的各个变量之间的相关关系。在相关图中,相关系数(correlation coefficients) 根据不同的值赋予了不同的颜色,相关矩阵(correlation matrix) 可以根据不同变量间的关系表现出来。在这里使用了R语言中的corrplot包。

安装corrplot包

要想在R语言中绘制相关图,需要先安装R包。在这里使用的是“corrplot”包,具体的R语言安装介绍请看前面的推文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"))
分级设色8级

这个颜色的详细信息可以从配色网站查询:

  1. https://tidyfriday.cn/colors/#type=sequential&scheme=BuGn&n=3
  2. https://colorbrewer2.org/

第一个是国内的,不过网站不太稳定,打开比较慢;第二个是国外的,需要翻墙,否则显示不全。

改变标注的颜色和方向

使用tl.col参数控制坐标轴标注颜色,使用tl.srt控制坐标轴标注旋转方向

corrplot(M, type="upper", order="hclust", tl.col="black", tl.srt=45)
坐标轴标注黑色,旋转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)
显著性水平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 
         )

参考文献

  1. http://www.sthda.com/english/wiki/visualize-correlation-matrix-using-correlogram#introduction
  2. https://colorbrewer2.org/
  3. https://cran.r-project.org/web/packages/corrplot/index.html


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

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