正在加载
请稍等

菜单

Home 码农菜园 数据分析 R学习笔记-9 中级绘图
Home 码农菜园 数据分析 R学习笔记-9 中级绘图

R学习笔记-9 中级绘图

数据分析 by   阅读量 7,245

在“基本图形”中所接触的图形,主要用于展示单类别型或连续型变量的分布情况,此处将介绍更多用于展示双变量间关系(二元关系)和多变量间关系(多元关系)的绘图方法。

9.1 散点图

散点图可用来描述两个连续型变量间的关系,让我们从最简单的plot()函数出发。

生成的图形中包括散点图、一条最佳拟合直线(abline)和一条平滑曲线(lowess)。

现在使用car包中的scatterplot()函数绘制一个增强的版本,绘制不同气缸数量汽车每加仑英里数对车重的图形,包括散点图、拟合直线和平滑曲线。

散点图矩阵

散点图矩阵用于展示多幅散点图,pairs()函数可以创建基础的散点图矩阵,以下代码包含mpg、disp、drat和wt中任意两者的散点图。

pairs()函数创建的散点图矩阵

car包的scatterplotMatrix()函数也可以生成散点图矩阵,并支持以下操作:

  • 以某个因子为条件绘制散点图矩阵;
  • 包含线型和平滑拟合曲线;
  • 在主对角线放置箱线图、密度图或者直方图;
  • 在各单元格的边界添加轴须图。

spread=FALSE选项表示不添加展示分散度和对称信息的直线。

scatterplotMatrix()函数

再来一个scatterplotMatrix()函数的使用例子,主对角线的核密度曲线改为了直方图,并且直方图以汽车气缸数为条件绘制。

scatterplotMatrix()函数另一个例子

gclus包中的cpairs()函数提供了一个有趣的散点图矩阵变种,支持重排矩阵中变量的位置,让相关性更高的变量更靠近主对角线,还可以对各单元格进行颜色编码来展示变量间的相关性大小。

首先查看各个变量之间相关性的大小:

可以发现相关性最高(0.89)的是车重(wt)和排量(disp),以及车重(wt)和每加仑英里数(mpg)。相关性最低(0.68)的是每加仑英里数(mpg)和后轴比(drat)。以下代码根据相关性大小,对散点图矩阵中的这些变量重新排序并着色。

按相关性排序并着色后的散点图矩阵

高密度散点图

当散点图中点数量过大时,数据点的重叠将会导致绘图效果显著变差。对于这种情况,可以使用封箱、颜色和透明度等来指定图中任意点上重叠点的数目。

smoothScatter()函数可利用核密度估计生成用颜色密度来表示点分布的散点图。

smoothScatter

hexbin包中的hexbin()函数将二元变量的封箱放到六边形单元格中。

hexbin包中的hexbin()函数

IDPmisc包中的iplot()函数也可以通过颜色来展示点的密度。

IDPmisc包中的iplot()函数

三维散点图

如果想一次性对三个定量变量的交互进行可视化,那么可以使用scatterplot3d中的scatterplot3d()函数进行绘制。

最基本的三维散点图

scatterplot3d()函数提供了许多选项,包括设置图形符号、轴、颜色、线条、网格线、突出显示和角度等功能。例如以下代码生成一幅突出显示效果的三维散点图,增强了纵深感并添加了连接点与水平面的垂直线。

带纵深效果和垂直线的三维散点图

还可以再加上一个回归面。

使用rgl包中的plot3d()函数可创建交互式的三维散点图,通过鼠标即可对图形进行旋转。

Rcmdr包中的scatter3d()函数可以实现类似功能。

气泡图

三维散点图用z轴表示第三个变量的大小,另一种思路是:先创建一个二维散点图,然后用点的大小来代表第三个变量的值,即气泡图。

使用symbols()函数来创建气泡图,支持的形状包括圆圈图、方形图、星形图、温度计图和箱线图,以绘制圆圈图为例:

如果想用面积而不是半径来表示第三个变量,则需要进行转换:

以下代码中,x轴表示车重,y轴表示每加仑英里数,气泡大小表示发动机排量。

一般来说,统计人员使用R时都倾向于避免使用气泡图,原因和避免使用饼图一样:相对于长度的判断,人们对体积/面积的判断通常更加困难。

9.2 折线图

将散点图上的点从左往右连接起来,即可得到折线图。以基础安装中的Orange数据集为例,绘制第一种树数据的散点图和折线图。

两幅图的区别取决于参数type=”b”,折线图一般可用以下两个函数之一来创建:

type=可选值如下:

  • p:只有点;
  • l:只有线;
  • o:实心点和线(即线覆盖在点上);
  • b、c:线连接点(c时不绘制点);
  • s、S:阶梯线;
  • h:直方图式的垂直线;
  • n:不生成任何点和线(通常用来为后面的命令创建坐标轴)

不同type=参数对应折线图

以下展示一个更复杂的折线图创建过程,每种树都有自己独有的线条。

9.3 相关图

相关图通过对相关系数矩阵的可视化,来回答多个被考察变量之间相关性强弱的问题。

以mtcars数据框为例,其包含了11个变量,每个变量都有32个观测,使用以下代码获得各变量间的相关系数。

仅凭借以上相关系数矩阵难以快速直观得反映出变量间相关性的强弱,corrgram包中的corrgram()函数可以用图形方式展示该相关系数矩阵。

mtcars的相关图

先解释左下方的单元格:蓝色单元格表示两变量呈正相关,红色单元格表示两变量呈负相关,颜色越深、饱和度越高,相关性越强。为了将有相似相关模式的变量聚集在一起,对矩阵的行和列都重新进行了排序(使用主成分法)。

右上方的饼图原理类似:蓝色表示正相关,红色表示负相关,相关性的强弱用饼图填充的大小来表示。

lower.panel和upper.panel参数指定了左下方和右上方图形的形式,可选的参数有:NULL(无内容)、panel.pie(饼图填充)、panel.shade(阴影深度)、panel.ellipse(置信椭圆)和panel.pts(平滑拟合曲线),还可以通过“diag.panel=panel.minmax”在对角线输出变量的最大最小值。不妨再试试以下例子:

9.4 马赛克图

以上讨论内容解决了可视化定量或连续型变量间关系的方法,如果是类别型变量,而且是多个(单个可以用柱状图或饼图、两个可以用三维柱状图)类别型变量间的关系,可以考虑马赛克图。

在马赛克图中,嵌套矩行面积正比于单元格频率,其中该频率即为多维列联表中的频率,颜色和/或阴影可表示拟合模型的残差值。

vcd包中的mosaic()函数可以绘制马赛克图(R基础安装中的mosaicplot()函数也可以绘制马赛克图,但是功能相对较弱),以基础安装中的Titanic数据集为例,它包含存活或死亡的乘客数、乘客的船舱等级(一等、二等、三等和船员)、性别(男性、女性),以及年龄层(儿童、成人)。

以多维列联表的形式查看Titanic数据集:

mosaic()函数调用格式如下:

其中table是数组形式的列联表,另外也可以用:

其中formula是标准的R表达式,data为数据框或表格,添加shade=TRUE将根据拟合模型的Pearson残差值对图形上色,添加legend=TRUE将展示残差值图例。以下两种方法都可以生成马赛克图,但是使用表达式允许对图形中变量的选择和摆放拥有更多的控制权。

Titanic数据集马赛克图

可以从马赛克图中得到很多信息:

  1. 从船员到头等舱,存活率陡然提高;
  2. 大部分孩子都处在二等舱和三等舱中;
  3. 头等舱中的女性大部分都存活了下来,而三等舱中仅有一半女性存活;
  4. 船员中女性很少,导致该组的Survived标签重叠(No和Yes);
  5. 在假定生存率和船舱等级、性别、年龄层无关的前提下,蓝色阴影表示实际值超过预期值,红色阴影表示实际值低于预期值。如头等舱女性存活率和男性船员死亡率超过预期值,而三等舱男性存活率比模型预期值低。

23 2015-04

1条评论

  1. 匿名说道:

    666

发表评论