科研星球

R语言统计与绘图:图形展示双变量间关系(二元关系)和多变量间关系(多元关系)

散点图-拟合曲线


散点图可用来描述两个连续型变量间的关系。这里以R中自带的mtcars数据为例绘制第一个示例图。为了展示图中两个变量的关系,我们加上了两条拟合曲线,分别来自于函数 lm() 和函数 lowess()


640.jpeg

图1,散点图示例1


绘制散点图的基础函数为 plot()。函数 abline()lines() 可以在图中添加拟合曲线。R中也提供了一些比 plot() 更强大的函数,比如 包car 中的 scatterplot()函数,感兴趣的同学可以自己尝试一下这个函数。

 


散点图矩阵


一个散点图可以展示两个变量之间的关系,如果有多个变量呢?散点图矩阵可以解决这个问题。散点图矩阵对应的函数是 pairs(),图2 就是一个很好的例子。


640 (1).jpeg

图2:散点图矩阵示例


在上图中,对角线上的变量名说明了每幅图形对应的两个变量。同时,不难发现,对角线上下的图形是相同的,可以通过参数 upper.panel = NULL 来控制只生成下三角的图形。同样的,在 包car 中也有函数 scatterplotMatrix() 可以绘制散点图矩阵。下面给出了一个例子。


下载.jpeg

图3:函数scatterplotMatrix()的例子。


可以看到上图中默认为散点图添加了拟合曲线,代码中的参数可以控制曲线为虚线或实线。


创建散点图矩阵的函数很多,比如:

  • glus包 中的 cpars() 函数

  • TeachingDemos包 中的 pairs2() 函数

  • HH包 中的xysplom() 函数

  • ResourceSelection包 中 的 kepairs() 函数

  • SMPracticals包 中的 pairs.mod() 函数


每个函数都加入了自己独特的曲线。散点图矩阵作为一种简单清晰的图形,可以说是数据分析与展示工作中必备的工具了。



密度散点图

散点图固然直观,但也不是完美的,在大数据时代,散点图就显得力不从心了。比如,10,000个观测点的案例中的散点图是这样的。


640 (2).jpeg

图4:10000个数据点的散点图


乌压压的一片,啥也看不到~ 这种情况下,高密度散点图可以帮我们解决困难。比如函数 smoothScatter()


下载 (1).jpeg

图5:高密度散点图


虽然丢失了一些细节,但可以完整的展示整体上两个变量之间的关系。上面的图形当然也有其他的函数可以绘制,比如 hexbin包 中的 hexbin() 函数。那散点图矩阵有没有对应大数据集的解决方案呢?答案是肯定的,比如函数smoothScatter() 以及 IDPmisc包 中的函数 ipairs()。大家不妨自己对照帮助文档动手试一试。




三维散点图


在二维坐标系中的散点图可以展示二元变量关系,那三维坐标系一定可以展示三元变量关系了。但是,人们对于三维散点图的观测能力是远不如二维散点图的。下面是一个简单的三维散点图的例子(可用scatterplot3d包中的 scatterplot3d()函数来绘制它们的关系)。


640.png

图6:三维散点图


这里就不展开讲更多三维散点图的函数了。大家感兴趣的话,可以自己尝试一下rgl包中的plot3d()、car包中函数scatter3d()等等。



气泡图


相信接触过功能富集之类分析工作的同学对气泡图不会陌生。这是另一种展示三个变量间的关系的方法。可用symbols()函数来创建气泡图。下面是一个气泡图的示例。

640 (1).png

图7.气泡图


其实,气泡图是一种特殊的散点图,通过先创建一个二维散点图,然后用点的大小来代表第三个变量的值,在某些分析工作中还是比较常见的。

散点图很多时候能帮我们发现数据中隐藏的一些关系,但如果要观察某个变量的变化趋势,折线图会是更好的选择。绘制折线图的主要函数包括了plot(),lines()。两者的主要区别在于lines()并不自己生成图形,而是在已有图形上添加信息。两个函数中控制生成图形的参数为type。参数type的选项如下:


640 (2).png

图8:参数type



相关图

下面有一个很好的例子为大家展示折线图的功能和绘制方法。

640 (3).png


折线图和散点图中的变量关系都只能靠我们自己定性判断,如果要得到定量的相关关系,该怎么办?相关图可以解决这个问题,下面是一个简单的例子,主要用到的函数为corrgram()。由于我们还没接触到R中的数据分析,这个图形的具体含义就不给大家解释了,在紧接着的几次讲完统计分析之后,再给大家补充这部分内容。


下载 (2).jpeg

图10:相关图示例



马赛克图

最后给大家介绍一种不太常见的图形——马赛克图。这种图形当然不是为了给数据打马赛克,它的功能是展示多个类别型变量之间的关系。回顾之前学过的图形,折线图和散点图可以展示连续型变量间关系的方法,单个类别型变量可以用柱状图或者饼图展示,那么马赛克图就解决了它们解决不了的问题。


在马赛克图中,嵌套矩形面积正比于单元格频率, 其中该频率即多维列联表中的频率。颜色和/或阴影可表示拟合模型的残差值。vcd包中的mosaic()函数可以绘制马赛克图。(R基础安装中的mosaicplot()也可绘制马 赛克图,但还是推荐vcd包,因为它具有更多扩展功能。)下图为例。


640 (4).png

图11:马赛克图示例


上图中,以R中自带的Titanic数据集为例,它包含存活或者死亡的乘客数、乘客的船舱等级(一等、二等、三等和船员)、性别(男性、 女性),以及年龄层(儿童、成人)等信息。这是一个被充分研究过的数据集。观察图形可以得到大量的数据信息。大家可以通过代码ftable(Titanic)得到更多详细信息。




本节小结



到这里,专门讲解图形绘制的内容基本结束,相信大家已经掌握了大部分基本图形的绘制技巧。后面我们就要开始统计分析部分的内容,中间肯定也会包含一些图形的绘制(比如前面的相关图),相信所有内容结束之后,大家都会是绘图小能手了!


没有账号?