正在加载
请稍等

菜单

Home 码农菜园 数据分析 R学习笔记-6 基本图形
Home 码农菜园 数据分析 R学习笔记-6 基本图形

R学习笔记-6 基本图形

数据分析 by   阅读量 4,292

分析数据要做的第一件事情,就是观察它。对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测?变量可以为连续型或类别型,我们将探索如何使用条形图、饼图、扇形图、直方图、核密度图、箱线图、小提琴图和点图等来分析和展示变量。

6.1 条形图

条形图通过垂直或水平的条形来展示类别型变量的分布(频数)。

其中的height是一个向量或一个矩阵。在接下来的例子中,将使用到vcd包中带有的Arthritis数据框,其描述了一项探索类风湿性关节炎新疗法研究的结果。

简单的条形图

当height为一个向量时,向量值便确定了各条形的高度并绘制一幅垂直的条形图。使用参数horiz=TRUE则生成一幅水平条形图,还可以使用main、xlab和ylab等图形参数。

在关节炎研究中,变量Improved记录了对每位接受了安慰剂或药物治疗的病人的治疗效果。其中28人有了明显改善,14人有部分改善,而42人没有改善。

其实如果要绘制的类别型变量是一个因子或有序型因子,就可以直接使用函数plot()快速创建一幅垂直条形图。由于Arthritis$Improved是一个因子,因此以下代码也可以达到同样效果。

堆砌条形图和分组条形图

如果height是一个矩阵而不是一个向量,则绘图结果将是一幅堆砌条形图或分组条形图。beside默认为FALSE表示堆砌,否则将分组。考虑治疗类型和改善情况的列联表:

第一个barplot函数绘制了一幅堆砌条形图,而第二个绘制了一幅分组条形图。图中图例和条形图叠加了,不过这可以通过格式化和放置图例的方法解决,故不用担心。

均值条形图

条形图并不一定要基于计数数据或频率数据,也可以使用数据整合函数并将结果传递给barplot()函数,来创建表示均值、中位数、标准差等条形图。

条形图的微调

有多种方法可以微调条形图的外观:

  • 随着条数的增多,可以使用cex.names减小字号避免标签重叠;
  • name.arg允许用一个字符向量指定条形的标签名;
  • 其他通用图形参数。

以下代码中,旋转了条形的标签(las)、修改了标签文本、增加了y边界的大小(mar)、缩小了字体大小(cex.names)。

棘状图

还有另一种特殊的条形图:棘状图(spinogram)。棘状图对堆砌条形图进行了重缩放,使得每个条形的高度均为1,每一段的高度表示所占比例。棘状图可由vcd包中的spine()绘制:

通过棘状图可以看出,治疗组和安慰剂组相比,获得显著改善的患者比例更高。

6.2 饼图

虽然饼图在商业世界中使用广泛,但是多数统计学家却并不支持它,因为相对于饼图的面积,人类对条形图或点图中的长度判断更加精确。也许是因为这个原因,R中饼图的选项和其他统计软件相比十分有限。

其中x是一个非负数值向量,表示各个扇形的面积,labels则是各扇形标签的字符型向量。以下代码绘制了三幅饼图,最简单的饼图、显示百分比的饼图和三维饼图。

饼图让比较各扇形的值变得困难,除非这些值被附加在标签上。为了弥补这一缺点,产生了一种饼图的变种:扇形图。扇形图为用户提供了一种同时展示相对数量和相互差异的方法,各个扇形相互叠加并且拥有不同半径,从而使得所有扇形都是可见的。

6.3 直方图

直方图通过在X轴上将值域分割为一定数量的组,在Y轴上显示相应值的频数,展示了连续型变量的分布。使用以下函数创建直方图:

x为一个由数据值组成的数值向量,参数freq=FALSE表示根据概率密度而不是频数绘制图形,参数breaks用于控制组的数量。

第一幅直方图未指定任何选项,共创建了五个组并且显示了默认的标题和坐标轴标签;第二幅直方图共12个分组,并使用红色填充条形;第三幅直方图保留了第二幅图的内容,并叠加了一条密度曲线(density)和轴须图(rug),密度曲线是数据分布一个的核密度估计,而轴须图是实际数据值的一种一维呈现方式;第四幅图和第二幅类似,还有一条叠加的正态曲线和一个将图形围绕起来的盒型。

6.4 核密度图

核密度估计是用于估计随机变量概率密度函数的一种非参数方法。

其中x为一个数值型向量,由于plot()函数会创建一幅新的图形,所以要向一幅已经存在的图形上叠加一条密度曲线时,可以使用lines()函数。

第一幅图是默认设置创建的最简图形,而第二幅图中添加了标题,并将曲线修改成蓝色、使用实心红色填充了曲线下方的区域、添加了棕色的轴须图。

使用sm包中的sm.density.compare()函数可以向图形叠加两组或更多核密度图,格式为:

其中x为一个数值型向量,factor为一个分组变量。以下代码比较了拥有4个、6个或8个汽缸车型的每加仑汽油行驶英里数。

6.5 箱线图

箱线图(又称盒须图)通过绘制连续型变量的五数总括,即最小值、下四分位数、中位数、上四分位数以及最大值,描述了连续型变量的值域分布。

使用并列箱线图进行跨组比较

箱线图可以展示单个变量或分组变量,使用格式为:

formula为一个公式,dataframe为提供数据的数据框或列表。公式形如y~A,将为类别型变量A的每个值并列地生成数值型变量y的箱线图;或者形如y~A*B,将为类别型变量A和B所有水平两两组合生成数值型变量y的箱线图。

可添加参数varwidth=TRUE使得箱线图的宽度与其样本大小的平方根成正比,参数horizontal=TRUE可以反转坐标轴方向。以下代码比较了4缸、6缸和8缸发动机对每加仑汽油行驶英里数的影响。

使用参数notch=TRUE将得到含凹槽的箱线图。

以下代码比较了变速箱类型和汽缸数量对每加仑汽油行驶英里数的影响。

小提琴图

小提琴图是箱线图和核密度图的结合,可使用vioplot包中的vioplot()函数绘制。

其中x1和x2等表示要绘制的一个或多个数值向量(将为每个向量绘制一幅小提琴图),names为小提琴图中标签的字符向量,col为每幅小提琴图所使用的颜色向量。

小提琴图基本上是核密度图以镜像方式在箱线图上的叠加。在图中,白点为中位数,黑色盒型的范围为下四分位数和上四分位数,细黑线表示须,外部形状即为核密度估计(左右镜像对称)。

6.6 点图

点图提供了一种在简单水平刻度上绘制大量有标签值的方法,可以使用dotchart()函数创建点图。

其中x为一个数值向量,labels为各个点的标签组成的向量。可以通过添加参数groups来选定一个因子,用以指定x中元素的分组方式,如果这样,还可以用参数gcolor控制不同组标签的颜色。

在以上代码所生成的图形中,可以方便地在同一水平轴上观察每种车型的每加仑汽油行驶英里数。点图在经过排序并且分组变量被不同的符号和颜色区分开时更有用,以下代码给出了一个示例。

因为每个点都有标签,每个点的值都有其内在含义,并且这些点以一种利于比较的方式排序,因此可以从点图中获得显著的洞察力。但是随着数据点的增多,点图的实用性随之下降。

16 2015-04

发表评论