R相关性图如何按比例显示相关系数
2020-12-21 本文已影响0人
生信交流平台
今天偶然从一篇paper里看到了一张R绘制的相关性图,跟以往看到的有些不一样。这张图里面不仅展示了相关系数,并且相关系数显示的大小跟相关系数是成比例的。这样做的好处是,让那些最显著相关的一目了然,而那些不怎么相关的就不那么显眼。这个引起了小编的兴趣,想自己也画一张这样的相关性图。
说干就干,就拿mtcars这套数据来练练手。先来个简单的,由简入繁
#加载corrplot包
library(corrplot)
#计算相关系数矩阵
M <- cor(mtcars)
#绘制对称圆圈图,显示相关系数,大小都为1
corrplot(M, method = "circle",
number.cex = 1,
addCoef.col="black"
)
接下来尝试一下根据相关系数的大小来调节显示的字体大小
#根据相关系数的大小M来设置字体的大小
#因为M有正有负,这里用abs取绝对值
corrplot(M, method = "circle",
number.cex = abs(M),
addCoef.col="black"
)
没想到这么容易就实现了,太没有挑战了。
不过文章中的相关性图是三角形的,接下来我们也来画一个三角形的图,胜利在望。
#设置type = "upper"就可以画出上三角
#设置成lower就可以画下三角
corrplot(M, method = "circle",
type = "upper",
number.cex = abs(M),
addCoef.col="black"
)
高兴太早,翻车了!只画一半的时候,不能用完整的相关系数矩阵M来作为字体的大小,这样设置不对。
推测如果图像只画一半,相关系数应该也只用一半。那么这个相关系数的顺序如何确定呢?下面来做个测试
#一共有66个圆圈,先全部把大小设置成0.1,几乎看不到
#然后把前三个的大小改大一些,看看那几个系数的大小有变化,
#从而确定顺序
size=rep(0.1,66)
size[1]=1
size[2]=0.5
size[3]=1
corrplot(M, method = "circle",
type = "upper",
number.cex = size,
addCoef.col="black"
)
被我发现了,是按列来排布的!如箭头所示的方向和顺序
接下来就是最终章了
#申明一个空变量来装size的大小
size=c()
#循环按列来获取相关系数,第一列取前一个,第二列取前两个
#依次类推
for(i in 1:ncol(M)){
size=c(size,M[1:i,i])
}
size=as.numeric(size)
corrplot(M, method = "circle",
type = "upper",
number.cex = abs(size),
addCoef.col="black"
)
大功告成了!!!
参考资料:
R相关性图如何按比例显示相关系数