
点击关注了解更多精彩内容!!

古人云:有缘千里能相会,无缘对面不相逢。铁哥认为“缘分”如果用数据来表示的话,那么可以用相关系数来进行量化。如果你和一个人的缘分足够深,那么你们之间的皮尔逊相关系数应该接近于1。但是真爱难觅,茫茫人海中,人们找到和自己的真心人(Mr/Miss Right)的概率却是千万分之一。
为了讲清楚如何基于ggplot2构建相关系数矩阵热图,铁哥打算讲个小故事?,缓解一下紧张的学习气氛。铁哥想先从友情故事讲起,虽然真爱难寻,谁还没个好朋友呢?!
铁哥有很多小伙伴,本文主要讲本科的小伙伴们吧,故事的主角有小通、小杭、小易、小明、小磊、小孙和小铁(铁哥那时候还算小铁?)吧。本科的时候,我们会参加各种各样的考试,如数学分析、SAS软件编程、随机过程、大学物理、诗歌鉴赏和体育等;铁哥记得当时:
小通、小杭、小易跟小明沉迷网络游戏,很多科目都是惊险及格;
小磊和小孙虽然也打游戏,但是他们还热爱⚽️,所以体育成绩特别好;
小铁游戏打得不好,?打得还不错,总体成绩比较平均。
下面铁哥用R语言定义每个同学的六门学习成绩。
# 定义每位小伙伴的各科成绩
# 课程包括:数学分析、SAS软件编程、随机过程、大学物理、诗歌鉴赏、体育


然后我们把七位小伙伴的成绩合并为数据集:
# 注意这里管道符 %>% 的使用
# 为了使数据集结构更清晰,我们还改变了行的名字

俗话说:人以类聚,物以群分。
我们来进一步计算一下七个小伙伴的皮尔逊相关系数矩阵吧:

为了使用ggplot2来画热图,我们还需要更改相关系数矩阵的格式,这里我们调用reshape2 来改变相关系数矩阵的格式从而适应ggplot2的语法,R代码如下:

然后我们就可以使用ggplot2函数画出相关系数热图了,R代码如下:
# geom_title()函数用于相关系数的可视化
# element_text(family = ‘Kai’) 用于图例中显示中文字体


当然,上面这个默认生成的热图非常丑陋?,铁哥也是一筹莫展。事实上,相关系数矩阵是存在冗余信息的,我们其实只保留上三角矩阵的信息就够了(矩阵对称),即将下三角矩阵元素赋值为NA。

基于这个上三角矩阵,我们再用ggplot函数画出相应的相关系数热图:
#下图中蓝色代表负相关,红色代表正相关


上面这个热图已经蛮不错了,但是铁哥还想更完美一点,铁哥希望相似度越高的个体距离越近,大家能够志同道合,拥有高山流水的友情。我们将使用hclust函数对样本进行重排序:



上面这个热图已经接近完美了,但是铁哥还想把相关系数加到图像中去:



最终铁哥构建了想要的相关系数热图,从上图中可以看出,铁哥的小伙伴可以聚类为两类:小磊和小孙明显有更多的相似处,小杭、小易、小铁、小通和小明则志趣相投。

回想起来,铁哥本科毕业也八年了,小磊和小孙也在国外知名外企站稳了脚跟,小杭、小易、小通和小明也在各自的岗位上贡献中坚力量,似乎也进一步印证了这张热图的结果。
唯有铁哥,依然奋战在科研的第一线,梦想着成为一个科学家。你若问我为什么,铁哥只能回答你一句话:21世纪是生命科学的世纪?…
PS:如果你想继续学习构建炫酷的个性化定制热图,欢迎联系铁哥额
,欢迎添加微信号:evazyc90,前来咨询。

R语言中强大的map函数——铁哥小故事版
R语言中神奇的管道符“%>%”
Ubuntu系统下通过添加PPA形式更新R软件版本
Mac系列电脑上应用命令行安装R和Rstudio
在电脑和服务器上离线安装R包
编辑:沃沃酱 监制:悠悠然
铁哥在等你一起学习哦~

长按扫码关注
“在看”的永远不秃顶~
