14.3 三种绘图系统
R在其生命周期中已经累计开发了三种不同的图形系统。base
图形是最古老的系统,在R的存在初期它就已经存在了。base
图形很容易上手,不过它们需要大量的修改甚至一些魔法咒语才能变得更完美,而且它很难扩展到新的图表类型中。
grid
图形系统的开发旨在修正base
中的一些限制而使绘图更加灵活。grid
允许你在绘图时涉及系统底层,可以具体指定在哪里画每个点、线或矩形。虽然这听起来不错,但当我们想画散点图时,没有人想每次都花大量的时间写几百行代码来实现。
第二个图形系统lattice
建立在grid
系统之上,它为所有常见的图表类型提供了高级函数。它有两个突出的特点是base
图形系统所不具备的。首先,每个绘图的结果被能保存到一个变量中,而不仅仅是绘制在屏幕上。这意味着你可以先画一些图形,再对其进行编辑,然后再把它画出来;这样会更容易画出那些相关的图形,而且图形可以保存在会话(session)之间。第二大特点是,可在一个格子中包含多个面板1,因此你能把数据分成不同的类别并比较各组之间的差异。这就解决了我们在第9章讨论的拆分-应用-合并所对应的绘图问题。
1它有好几种术语名称。Edward Tufte在Envisioning Information中称之为“small multiples”,贝尔实验室的Bill Cleveland和Rick Becker为它杜撰了"trellising"一词,Deepayan Sarkar在lattice
包中为了避免使用以上的名称,称之为"latticing",而Leland Wilkingson把它称为"faceting"(ggplot2
中的术语)。
同样也是建立在grid
系统之上的ggplot2
系统是三个图形系统中最新的。gg代表:grammar of graphics(制图语法)2,其目标在于把图形分解成不同的组块。其结果就是,ggplot的代码看起来有点像是用英文描述你在图表中做什么。
2此概念由Leland Wilkinson在同名书中提出。这本书很不错,但由于到处都是公式,不适合床上阅读。
令人遗憾的是,这三个系统几乎互不兼容(也有一些方法能把base
和grid
系统组合起来,然而万不得已最好不要使用它)。好消息是,你几乎可以使用ggplot2
做任何事情,所以没有必要对所有三个系统都学习一遍。但在极少的某些场景下,ggplot2不太适用——与其他图形系统相比它需要更多的计算,因此,如果想快速和粗略地绘制非常大的数据集,使用其他系统会更方便。此外,许多图形软件包是基于另外两个系统的,所以如果想使用那些包,就需要对base
或lattice
系统稍作了解。
下例展示了所有的三个系统。如果时间紧迫,你可以仅需阅读ggplot2
部分。由于篇幅的限制,本章只能浅尝辄止而不作深入探讨。幸好,关于R的图形绘制,有三本非常优秀和通俗易懂的书:R Graphics、ggplot2和Lattice,其作者分别是grid
、ggplot2
和lattice
系统的创作者3。
3绘图方面的书的好处是:即使你不太有兴趣,快速翻阅这些书也挺赏心悦目。