热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何基于ggplot2构建相关系数矩阵热图以及一个友情故事

本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。

04f3986e0a9aae7f5f0fd9cdc780a86d.png

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

449a7aab7e152590cea727a22a8f63ca.gif古人云:有缘千里能相会,无缘对面不相逢。铁哥认为“缘分”如果用数据来表示的话,那么可以用相关系数来进行量化。如果你和一个人的缘分足够深,那么你们之间的皮尔逊相关系数应该接近于1。但是真爱难觅,茫茫人海中,人们找到和自己的真心人(Mr/Miss Right)的概率却是千万分之一。

为了讲清楚如何基于ggplot2构建相关系数矩阵热图,铁哥打算讲个小故事?,缓解一下紧张的学习气氛。铁哥想先从友情故事讲起,虽然真爱难寻,谁还没个好朋友呢?!

铁哥有很多小伙伴,本文主要讲本科的小伙伴们吧,故事的主角有小通、小杭、小易、小明、小磊、小孙和小铁(铁哥那时候还算小铁?)吧。本科的时候,我们会参加各种各样的考试,如数学分析、SAS软件编程、随机过程、大学物理、诗歌鉴赏和体育等;铁哥记得当时:

小通、小杭、小易跟小明沉迷网络游戏,很多科目都是惊险及格;

小磊和小孙虽然也打游戏,但是他们还热爱⚽️,所以体育成绩特别好;

小铁游戏打得不好,?打得还不错,总体成绩比较平均。

下面铁哥用R语言定义每个同学的六门学习成绩。

# 定义每位小伙伴的各科成绩

# 课程包括:数学分析、SAS软件编程、随机过程、大学物理、诗歌鉴赏、体育

f9acdf05030f3273e61e3b2cba4a911d.pngccb73e67ae3b31b27977dd03a4ecf249.png

然后我们把七位小伙伴的成绩合并为数据集:

# 注意这里管道符 %>% 的使用

# 为了使数据集结构更清晰,我们还改变了行的名字

4c2eeeedf26e5a00c30e95640a436cc9.png

俗话说:人以类聚,物以群分。

我们来进一步计算一下七个小伙伴的皮尔逊相关系数矩阵吧:

eaa5be436a1e91d07427c5acf5b9e08f.png

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

2ba6ea5d547656aefed70dc663a02edb.png

然后我们就可以使用ggplot2函数画出相关系数热图了,R代码如下:

# geom_title()函数用于相关系数的可视化

# element_text(family = ‘Kai’) 用于图例中显示中文字体

18483b25a525b9a782a7b25e7b28c528.png

9b70dc222b91d1387bbe848c86795574.png

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

01733bda3f9d9292d96fde21a0b74b66.png

基于这个上三角矩阵,我们再用ggplot函数画出相应的相关系数热图:

#下图中蓝色代表负相关,红色代表正相关

f43b6abe49a603ef7c3ee8bd13a8008c.png

0d608fdd05cefad9bf1b2317815b7ad3.png

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

600c4afd51f764b30e5b4d493c3c4514.png

 335654639219979d976130ca3ccdec91.png

f9acdf05030f3273e61e3b2cba4a911d.png

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

840009650ce105cb8519589f686aae75.png

3fe926527cac4895bfe05992d1232060.png

8b91fe725e7f955c6da5a77c31df3afd.png

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

77f220922283f643930caa01c74e8b2d.png

回想起来,铁哥本科毕业也八年了,小磊和小孙也在国外知名外企站稳了脚跟,小杭、小易、小通和小明也在各自的岗位上贡献中坚力量,似乎也进一步印证了这张热图的结果。

唯有铁哥,依然奋战在科研的第一线,梦想着成为一个科学家。你若问我为什么,铁哥只能回答你一句话:21世纪是生命科学的世纪?…

PS:如果你想继续学习构建炫酷的个性化定制热图,欢迎联系铁哥额b8b30f0d33f45d5699c48a2a6adfd691.png ,欢迎添加微信号:evazyc90,前来咨询。

07bcfbcf87fb837516091be50c0c3f8c.gif

R语言中强大的map函数——铁哥小故事版

R语言中神奇的管道符“%>%”

Ubuntu系统下通过添加PPA形式更新R软件版本

Mac系列电脑上应用命令行安装R和Rstudio

在电脑和服务器上离线安装R包

编辑:沃沃酱  监制:悠悠然

铁哥在等你一起学习哦~

585c5267e9a4caf113cde45a59480d3d.png

长按扫码关注

在看”的永远不秃顶~

45b548e4079295b232fff16bd5bcbdcb.gif


推荐阅读
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 华为智慧屏:超越屏幕尺寸的智能进化
    继全球发布后,华为智慧屏于9月26日在上海正式亮相,推出65英寸和75英寸版本。该产品不仅在屏幕尺寸上有所突破,更在性能和智能化方面实现了显著提升。 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • 本文详细介绍了如何在Kendo UI for jQuery的数据管理组件中,将行标题字段呈现为锚点(即可点击链接),帮助开发人员更高效地实现这一功能。通过具体的代码示例和解释,即使是新手也能轻松掌握。 ... [详细]
  • 本文回顾了2017年的转型和2018年的收获,分享了几家知名互联网公司提供的工作机会及面试体验。 ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • springMVC JRS303验证 ... [详细]
author-avatar
piggyear
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有