R小技巧

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相关性图如何按比例显示相关系数​

上一篇 下一篇

猜你喜欢

热点阅读