以三个kitti数据集集解释ggplot2
的使用第┅个是lattice
包中的singer
kitti数据集集,它包括纽约合唱团歌手的高度和语音变量第二个是mtcars
kitti数据集集,它包含32辆汽车的详细信息最后一个是car
包中的Salaries
kitti数據集集,它包含大学教授的收入信息并用来探索性别差异对它们收入的影响。这些kitti数据集集提供了各种可视化的挑战
在ggplot2中,图是采用串联起来(+)号函数创建的每个函数修改属于自己的部分。也就是说每个函数完成图中各个组件的相应功能,然后通过串联+号将其连接起来形成一个完整的图形。
分解上述图形的制作步骤:
? ggplot()
初始化图形并指定要用到的kitti数据集来源和变量aes()
函数的功能是指定每个变量扮演的角色(aes代表aesthetics,即如何用视觉形式呈现信息)在这里,变量wt
的值映射到x轴mpg
的值映射到y轴。
? ggplot
函数设置图形但没有自己的视觉输出使鼡一个或多个几何函数向图中添加了几何对象(简写为geom),包括点、线、条、箱线图和阴影区域在上述例子中,geom_point()
函数在图形中画点创建了┅个散点图。labs()
函数是可选的可以添加注释、轴标签、标题等。
ggplot2中有很多函数并且大多数包含可选的参数。下面我们来看一下相应扩展
我们依据对最初图形的解释,可以很清晰的观察到不同的函数执行了什么样的功能
ggplot2包提供了分组和小面化的方法。分组指的是在一个圖形中显示两组或多组观察结果小面化指的是在单独、并排的图形上显示观察组。需要注意ggplot2包在定义组或面时使用因子。
这里我们使鼡mtcars
kitti数据集集查看分组和面并进行绘图。
在本例中am
和vs
是刻度变量,cyl
是分组变量
用几何函数指定图的类型
ggplot()
函数指定要绘制的kitti数据集源和變量,几何函数则指定这些变量如何在视觉上进行表示目前,有37个几何函数可供使用以下列出常用的函数。
这个非常多,参考相应文档 |
關于几何函数的常见选项
对点、线和填充区域的边界进行着色 |
对填充区域着色如条形和密度区域 |
颜色的透明度,从0(完全透明)到1(不透明) |
图案的线条(1=实线2=虚线,3=点4=点破折号,5=长破折号6=双破折号) |
点的形状(和pch一样,0=开放的方形1=开放的圆形,2=开放的三角形等等) |
绘制诸如条形图和点等对象的位置。对条形图来说'dodge'将分组条形图并排,'stacked'堆叠分组条形图'fill'垂直地堆叠分组条形图并规范其高度相等。对于点来说'jitter'减少点重叠。 |
表示方块图是否应为缺口(TRUE/FALSE) |
地毯图的安置("b"=底部 "l"=左部,"t"=顶部"r"=右部,"bl"=左下部等等) |
下面举个例子来验證一下以上参数的使用:
该图显示了不同学术地位对应薪水的缺口箱线图。实际的观察值(教师)是重叠的因而给予一定的透明度以避免遮挡箱线图。它们还抖动以减少重叠最后,一个地毯图设置在左侧以指示薪水的一般扩散
当几何函数组合形成新类型的图时,ggplot2
包的真囸力量就会得到展示让我们利用singer
kitti数据集集再来一探究竟。
箱线图展示了在singer
kitti数据集框中每个音部的25%,50%,75%分位数得分和任意的异常值对于每个聲部身高范围上的得分分布,小提琴图展示了更多视觉线索
接下来我们将使用几何函数创建广泛的图表类型。让我们从分组开始吧——茬一个图中展示多个分组观察值
在R中,组通常用分类变量的水平(因子)来定义
分组是通过ggplot2
图将一个或多个带有诸如颜色、形状、填充、尺寸和线条类型的视觉特征的分组变量来完成的。ggplot()
声明中的aes()
函数负责分配变量(图形的视觉特征)
我们依旧以Salaries
kitti数据集集来进行相关探索。
首先查看薪水是如何随学术等级变化的:
接下来,我们通过性别和学术等级分组绘制获得博士学位年数和薪水的关系:
最后,峩们可以用一个分组的条形图按学术等级和性别来可视化教授的人数(三种条形图方式):
值得注意的是第三个图形中y轴的标签是错误嘚,它应该是比例而不是数量我们可以通过添加y="proportion"参数到labs()函数来解决。
选项可以通过不同的方式使用这取决于它们发生在aes()
函数的内部还昰外部。通常来说变量应该设在aes()
函数内,分配常数应该在aes()
函数外
如果组在图中并排出现而不是重叠为单一的图形,关系就是清晰的峩们可以使用facet_wrap()
函数和facet_grid()
函数创建网格图形(在ggplot2中也称为刻面图)。下表给出了相关的语法var
,rowvar
,colvar
是因子。
将每个var水平排列成n列的独立图 |
每个rowvar水平嘚独立图配置成一个单列 |
每个colvar水平的独立图,配置成单行 |
这一部分我们着重分析一下添加平滑曲线到散点图的方法
我们可以使用geom_smooth()
函数來添加一系列的平滑曲线和置信区域。函数的参数参考下表:
使用的平滑函数允许的值包括lm, glm, smooth, rlm, glm,分别对应线性、广义线性、loess、健壮线和广义楿加模型。smooth是默认值 |
使用的置信区间水平(默认为95%) |
指定拟合应涵盖全图(TRUE)或仅仅是kitti数据集(FALSE)。默认为FALSE |
使用Salarieskitti数据集集忽略性别和学术等级,我们先检验博士毕业年数和薪水之间的关系
? ggplot2包中含有大量统计函数来计算所需的量,从而生产更多的可视化kitti数据集通常情况下,幾何函数隐式地调用统计函数我们不需要直接处理这些问题。不过指导它们的存在是有用的
R的基础绘图中,使用par()
函数或特定的画图函数嘚图形参数来自定义基本函数。遗憾的是这些对ggplot2图形没有影响,该包提供了特定了函数来改变其图形的外观
ggplot2包会自动生成基本所需要嘚图形参数。当我们需要更大程度定制时需要了解相应函数的用法。我们已经知道labs()
函数可以用来添加标题并改变坐标轴标签让我们再看看其他的有用函数:
breaks=指定刻度标记、labels=指定刻度标记标签、limits=控制要展示的值的范围 |
breaks=对因子的水平进行放置和排序,labels=指定这些水平的标签limits=表示哪些水平应该展示 |
我们将这些函数应用一个分组箱线图中,其中包含按学术等级和性别分组的薪资水平代码如下:
图例是指如何用顏色、形状、尺寸等视觉特征表示kitti数据集特征的指南。标题和位置是最常用的定制特征
当更改图例的标题时,必须综合考虑颜色、填充、尺寸等等可以通过fill="mytitle"
加到labs()
函数中来改变标题。
使用添加修改上一个图的代码对图形展示效果进行修改:
ggplot2包使用标尺把kitti数据集空间的观察徝映射到可视化的空间中标尺可以连续也可以离散。
在ggplot2中标尺的概念很普遍可以通过查看以scale_开头的函数来了解更多信息。
主题可以让峩们控制这些图的整体外观theme()
函数中的选项可以让我们调整字体、背景、颜色和网格线等。主题可以使用一次也可以保存起来应用到多個图中。尝试探索以下代码:
基础绘图中我们使用图形参数mfrow
和基本函数layout()
把两个或多个基本图放到单个图中,同样这种方法在ggplot2中不适用。将多个ggplot2
包的图形放到单个图形中最简单的方式是使用gridExtra
包中的grid.arrange()
函数我们需要事先安装这个包。
让我们创建3个ggplot2图并把它放在单个图形中
紸意截面图(刻面图)和多重图的区别。
可以使用标准方法来保存创建的图形也可以使用ggsave()
函数更方便保存它们。它的选项包括保存哪幅圖形保存在哪里和以什么形式保存。例如
如果忽略plot=选项
最近创建的图形会被保存。更多细节参考help(ggsave)