购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1 ggplot2的图层语法

在ggplot2问世之前,R语言已经具备比较成熟的绘图工具包,比如官方的基础图形系统graphics包、网格图形系统grid包、Deepayan Sarkar开发的lattice包等。这些包采用整体封装的设计思路,将不同的绘图函数封装成一个个函数整体,用户根据自身需要选择相应的函数,并设置相关的参数,便可绘制相应图形。这种设计对于简单的图形绘制非常实用,可当需要绘制的图形复杂度增加时,涉及的参数将会非常庞大,图形的绘制也变得繁重起来。

为了提高绘图的灵活性,ggplot2中提出了一套图层语法,将图形中的元素拆分成一系列相互独立的部分,用户在绘图时不需要在一开始就设置图形中涉及的所有参数,而是将需要的图形元素一点点添加到图中。这种设计使得用户在面临复杂的图形时也能灵活绘制,绘图变成了一个从易到繁、自由组合的过程。

本节主要介绍ggplot2的图层语法,该语法是ggplot2的理论基础,掌握该语法才能掌握ggplot2的精髓。

2.1.1 图像的组成

在图层语法中,图像主要由以下部分组成:

(1)待可视化的数据(data)以及数据中的变量到图形属性的映射(mapping)。

(2)几何对象(geom)、统计变换(stat)和位置调整(position),其中几何对象就是显示在图中的图形元素,统计变换是对数据的某种处理,位置调整用于调整元素的位置。

(3)标度(scale),数据取值到图形属性的映射,如不同的取值对应不同的大小或颜色。

(4)坐标系(coord),通常为笛卡尔坐标系,偶尔也用极坐标等其他坐标系。

(5)分面(facet),对数据的不同子集作图并联合展示。

(6)主题(theme),对图像的细节进行调整,如网格线间隔、背景颜色等。

上述图像组件中,数据、映射、几何对象、统计变换以及位置调整共同组成了一个图层,标度、坐标系、分面以及主题主要用于调整图形细节,使图像满足我们的绘制需求,并且更加美观。

图层的叠加是ggplot2绘图的核心思想。在ggplot2中通过符号“+”将不同的图层叠加在一起,编码的位置越靠后,图层就叠加在更上层,多个图层的叠加最终组成目标绘图,这种设计方式与Photoshop中的图层叠加类似。

图2-1展示了图层语法的基本框架。

2.1.2 散点图示例

为了更好地说明ggplot2的图层语法,我们接下来将介绍一个绘图示例。待可视化的数据集为R包中自带的数据集mpg,数据集mpg中记录了各种与汽车相关的信息,比如汽车型号、类别、引擎大小、耗油量等,该数据集中的前十行数据如图2-2所示。

数据集mpg中,manufacturer表示汽车生产商,model表示汽车的型号,displ表示发动机的排量,year为生产年份,cyl表示气缸数,trans代表传输类型,drv代表汽车传动系统的类型,cty字段和hwy字段分别记录了汽车每使用1加仑 汽油可以在城市和高速公路上的行驶距离,fl表示燃料类型,class表示汽车的等级。我们将绘制汽车每使用1加仑汽油在不同类型公路上的行驶距离的对比散点图,并在图像中添加一些辅助信息,以获得既美观又符合我们需求的统计图。

图2-1 图层语法的基本框架

图2-2 数据集mpg中的部分信息

加载相应的工具包“ggplot2”是绘图的第一步。在上述示例中,我们首先调用底层绘图函数ggplot(),data=mpg表明待可视化的数据集为mpg,随后我们建立该数据集中cty字段与hwy字段的映射关系,其中cty字段中的数据对应x轴,hwy字段中的数据对应y轴。需要注意的是,待可视化的数据集的格式必须为data.frame()。

geom_xxx()函数用于绘制不同类型的统计图,这里调用geom_point()函数绘制散点图。colour=class表示散点的颜色依据class取值的不同而不同(颜色也可以用英文单词color),size=displ表示发动机的排量越大,散点的大小就越大。stat_smooth()函数用于拟合曲线。

scale_size_continuous(range=c(3,8))表示散点的大小范围为3~8。facet_wrap(~year,ncol=1)表示图像依据year分面,mpg中year字段只有1999和2008两种取值,由于设置了ncol=1,因此图像将分成上下两张图。labs(title="公路类型-行驶距离")为图像添加了标题,theme(plot.title=element_text(size=15,hjust=0.5))将标题文字大小设置为15,并设置对齐方式为居中。绘图结果如图2-3所示。

图2-3 汽车每使用1加仑汽油在不同类型公路上的行驶距离的对比散点图 u/gY7PXNb2cATiVBuP/X8GUl/MrZ7VUHeLlAHCIbsMoKU0lQQ23iA/W5BaEPDCF+

点击中间区域
呼出菜单
上一章
目录
下一章
×