R语言数据可视化之美:专业图表绘制指南(增强版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5 R语言绘图基础

在R里,主要有两大底层图形系统,一是基础图形系统,二是grid图形系统。lattice包与ggplot2包正是基于grid图形系统构建的,而基础绘图函数由graphics包提供,它们都有自己独特的语法。

grid图形系统可以很容易地控制图形基础单元,给予编程者创作图形极大的灵活性。grid图形系统还可以产生可编辑的图形组件,这些图形组件可以被复用和重组,并能通过grid.layout()等函数,把图形输出到指定的位置上。但是因为grid包中没有提供生成统计图形及完整绘图的函数,因此很少直接使用grid包来分析与展示数据。

lattice包通过一维、二维或三维条件绘图,即所谓的栅栏(trellis)图来对多元变量关系进行直观展示。相较基础绘图函数,是直接在图形设备上绘图的,lattic包绘图函数返回trellis对象。在命令执行时,栅栏图会被自动打印,所以看起来就像是lattice()函数直接完成了绘图[15]。更多关于graphics、grid和lattice的语法可以参考Murrell和Paul所撰写的书籍R graphics[15]

ggplot2包则基于一种全面的图形语法,提供了一种全新的图形创建方式,这套图形语法把绘图过程归纳为数据(data)、转换(transformation)、度量(scale)、坐标系(coordinate)、元素(element)、指引(guide)、显示(display)等一系列独立的步骤,通过将这些步骤搭配组合,来实现个性化的统计绘图。于是,得益于该图形语法,Hadley Wickham所开发的ggplot2包是如此人性化,不同于R graphics包的基础绘图和先前的lattice包那样参数繁多,而是摈弃了诸多烦琐细节,并以人性化的思维进行高质量作图。在ggplot2包中,加号(+)的引入是革命性的,这个神奇的符号完成了一系列图形语法叠加[16][17]。更多ggplot2的使用与学习可以参考两本关于ggplot2的经典书籍:ggplot2 Elegant Graphics for Data Analysis[16]R Graphics Cookbook[17]

R语言基础安装中就包含graphics、grid和lattice三个包,无须另外下载。但是除了graphics包,其他包依旧需要使用library()函数加载后,才能使用。使用graphics、lattice和ggplot2包绘制的散点图、统计直方图和箱形图,如图1-5-1、图1-5-2和图1-5-3所示。

图1-5-1 graphics包绘制的图表示例

图1-5-2 lattice包绘制的图表示例

图1-5-3 ggplot2包绘制的图表示例

使用graphics、lattice和ggplot2包绘制的散点图、统计直方图和箱形图的具体代码如表1-5-1所示。df是一个包含SOD、tau和Class(Control、Impaired和Uncertain)三列的数据框。其中,graphics和lattice语法最大的问题就是参数繁多、条理不清。而ggplot2语法相对来说很清晰,可以绘制很美观的个性化图表。本书将会以图表类型为线索,详细地介绍常用图表的绘制方法,以ggplo2图形语法为主,但是有时候也会使用graphics和lattice等图形语法。

表1-5-1 不同图形语法的代码示例