是时候 关注 我们一波了
在上一次的推文中,我们已经介绍了很多应用广泛的图形。它们主要用于展示单类别型或连续型变量的分布情况。这一次,我们来讨论一下怎么利用图形展示双变量间关系(二元关系)和多变量间关系(多元关系)。展示变量关系的图形有很多,我们今天就主要介绍几种。
本篇教程,内容十分丰富,虽然是单篇,大家务必多多练习,可以充当一周的学习内容,静下心来慢慢吸收。
温馨提示
1、本节内容重点内容较多,
务必紧跟红色标记。
2、测试数据及代码
见文末客服小姐姐二维码。
散点图-拟合曲线
散点图可用来描述两个连续型变量间的关系。这里以R中自带的mtcars数据为例绘制第一个示例图。为了展示图中两个变量的关系,我们加上了两条拟合曲线,分别来自于函数 lm() 和函数 lowess()。
图1,散点图示例1
绘制散点图的基础函数为 plot()。函数 abline()、lines() 可以在图中添加拟合曲线。R中也提供了一些比 plot() 更强大的函数,比如 包car 中的 scatterplot()函数,感兴趣的同学可以自己尝试一下这个函数。
散点图矩阵
一个散点图可以展示两个变量之间的关系,如果有多个变量呢?散点图矩阵可以解决这个问题。散点图矩阵对应的函数是 pairs(),图2 就是一个很好的例子。
图2:散点图矩阵示例
在上图中,对角线上的变量名说明了每幅图形对应的两个变量。同时,不难发现,对角线上下的图形是相同的,可以通过参数 upper.panel = NULL 来控制只生成下三角的图形。同样的,在 包car 中也有函数 scatterplotMatrix() 可以绘制散点图矩阵。下面给出了一个例子。
图3:函数scatterplotMatrix()的例子。
可以看到上图中默认为散点图添加了拟合曲线,代码中的参数可以控制曲线为虚线或实线。
创建散点图矩阵的函数很多,比如:
- glus包 中的 cpars() 函数
- TeachingDemos包 中的 pairs2() 函数
- HH包 中的xysplom() 函数
- ResourceSelection包 中 的 kepairs() 函数
- SMPracticals包 中的 pairs.mod() 函数。
每个函数都加入了自己独特的曲线。散点图矩阵作为一种简单清晰的图形,可以说是数据分析与展示工作中必备的工具了。
密度散点图
散点图固然直观,但也不是完美的,在大数据时代,散点图就显得力不从心了。比如,10,000个观测点的案例中的散点图是这样的。
图4:10000个数据点的散点图
乌压压的一片,啥也看不到~ 这种情况下,高密度散点图可以帮我们解决困难。比如函数 smoothScatter()。
图5:高密度散点图
虽然丢失了一些细节,但可以完整的展示整体上两个变量之间的关系。上面的图形当然也有其他的函数可以绘制,比如 hexbin包 中的 hexbin() 函数。那散点图矩阵有没有对应大数据集的解决方案呢?答案是肯定的,比如函数smoothScatter() 以及 IDPmisc包 中的函数 ipairs()。大家不妨自己对照帮助文档动手试一试。
三维散点图
在二维坐标系中的散点图可以展示二元变量关系,那三维坐标系一定可以展示三元变量关系了。但是,人们对于三维散点图的观测能力是远不如二维散点图的。下面是一个简单的三维散点图的例子(可用scatterplot3d包中的 scatterplot3d()函数来绘制它们的关系)。
图6:三维散点图
这里就不展开讲更多三维散点图的函数了。大家感兴趣的话,可以自己尝试一下rgl包中的plot3d()、car包中函数scatter3d()等等。
气泡图
相信接触过功能富集之类分析工作的同学对气泡图不会陌生。这是另一种展示三个变量间的关系的方法。可用symbols()函数来创建气泡图。下面是一个气泡图的示例。
图7.气泡图
其实,气泡图是一种特殊的散点图,通过先创建一个二维散点图,然后用点的大小来代表第三个变量的值,在某些分析工作中还是比较常见的。
散点图很多时候能帮我们发现数据中隐藏的一些关系,但如果要观察某个变量的变化趋势,折线图会是更好的选择。绘制折线图的主要函数包括了plot(),lines()。两者的主要区别在于lines()并不自己生成图形,而是在已有图形上添加信息。两个函数中控制生成图形的参数为type。参数type的选项如下:
图8:参数type
相关图
下面有一个很好的例子为大家展示折线图的功能和绘制方法。
折线图和散点图中的变量关系都只能靠我们自己定性判断,如果要得到定量的相关关系,该怎么办?相关图可以解决这个问题,下面是一个简单的例子,主要用到的函数为corrgram()。由于我们还没接触到R中的数据分析,这个图形的具体含义就不给大家解释了,在紧接着的几次讲完统计分析之后,再给大家补充这部分内容。
图10:相关图示例
马赛克图
最后给大家介绍一种不太常见的图形——马赛克图。这种图形当然不是为了给数据打马赛克,它的功能是展示多个类别型变量之间的关系。回顾之前学过的图形,折线图和散点图可以展示连续型变量间关系的方法,单个类别型变量可以用柱状图或者饼图展示,那么马赛克图就解决了它们解决不了的问题。
在马赛克图中,嵌套矩形面积正比于单元格频率, 其中该频率即多维列联表中的频率。颜色和/或阴影可表示拟合模型的残差值。vcd包中的mosaic()函数可以绘制马赛克图。(R基础安装中的mosaicplot()也可绘制马 赛克图,但还是推荐vcd包,因为它具有更多扩展功能。)下图为例。
图11:马赛克图示例
上图中,以R中自带的Titanic数据集为例,它包含存活或者死亡的乘客数、乘客的船舱等级(一等、二等、三等和船员)、性别(男性、 女性),以及年龄层(儿童、成人)等信息。这是一个被充分研究过的数据集。观察图形可以得到大量的数据信息。大家可以通过代码ftable(Titanic)得到更多详细信息。
本节小结
到这里,专门讲解图形绘制的内容基本结束,相信大家已经掌握了大部分基本图形的绘制技巧。后面我们就要开始统计分析部分的内容,中间肯定也会包含一些图形的绘制(比如前面的相关图),相信所有内容结束之后,大家都会是绘图小能手了!
最后,为了方便大家学习,本次推文中所有图形的数据都来自R自带或者R中函数包自带,图形及相关代码免费奉送~~可以通过联系文末客服小姐姐获得。
线下课程热烈报名中,想学R语言看过来
从R语言入手学习生物信息与数据挖掘
讲师简介
上海交通大学硕士,MIT博士,长期从事医学与生物信息学研究,主要研究方向为高通量测序在肿瘤早期筛查和无创产前诊断中的临床应用,独立开发多个数据分析软件并发表相关文章(影响因子≥5分6篇,≥10分2篇),熟知R、Python、Perl及C语言等多种编程语言及程序设计,曾累计书写R代码超过5万余行。
下期推文预告
基本统计分析
本期干货
R语言Day9-高级统计绘图代码
原文详情:“科研猫”公众号,
科研猫原创系列,未经许可严禁转载
版权事宜由上海辰明律师事务所提供法务支持。