内容简介
ggplot2 是R中新颖的数据可视化包,功能强大、灵活便捷,其灵感源自 Leland
Wilkison的《图形的语法》一书。使用 ggplot2 可以轻松实现:
高质量图形的绘制,自动化添加图例。
叠加来自不同数据源的多个图层(点、线、地图、瓦片图、箱线图等),自适应通用标度。
利用 R 强大的建模功能添加平滑曲线,如 loess 、线性模型、广义可加模型和稳健回归。
保存任意ggplot2 图形,方便修改或重复使用。
制作主题,满足内部定制或杂志风格的需求,便捷地应用到多幅图形上。
从视觉角度上审视你的图形,斟酌每一部分数据如何呈现在图形上。
如果你想将枯燥的数据转化为生动、形象的图片,本书大有裨益。你需要了解 R
的基本知识(比如如何将数据导入到R),不过 ggplot2
是专门为绘图量身打造的“迷你语言”,在本书中你就可以学到你需要的所有知识。在阅读完本书之后,你就可以针对你的问题绘制出定制的图形,并且发现将脑海中的图片绘制在屏幕上已经变得轻而易举了。译者亲切地称之为“玩转数据可视化的瑞士军!”
目录
1.简介
2.从qplot开始入门
3.语法突破
4. 用图层构建图像
5.工具箱
6. 标度、坐标轴和图例
7.定位
8. 精雕细琢
9. 数据操作
10.减少重复性工作
附录A 不同语法间的转换
附录B 图形属性的定义
附录C 用grid操作图形
摘要与插图
每当我们看到一个新的软件,第一反应会是:为什么又要发明一个新软件?ggplot2是R世界里相对还比较年轻的一个包,在它之前,官方R已经有自己的基础图形系统(graphics包) 和网格图形系统(grid 包),并且Deepayan Sarkar也开发了lattice
包,看起来R的世界对图形的支持已经足够强大了。那么我们不禁要问,为什么还要发明一套新的系统?
设计理念
打个比方,想想我们小时候怎样学中文的。始的时候我们要识字,不认识字就没法阅读和写作,但我们并不是一直按照一个个汉字学习的,而是通过句子和具体的场景故事学习的。为什么不在小学时背六年字典呢?那样可能认识所有的汉字。原因很简单,光有单字,我们不会说话,也无法阅读和写作。我们缺的是什么?答案是对文字的组织能力,或者说语法。
R的基础图形系统基本上是一个“纸笔模型”,即:一块画布摆在面前,你可以在这里画几个点,在那里画几条线,指哪儿画哪儿。后来lattice
包的出现稍微改善了这种情况,你可以说,我要画散点图或直方图,并且按照某个分类变量给图中的元素上色,此时数据才在画图中扮演了一定的中心角色,我们不用去想具体这个点要用什么颜色(颜色会根据变量自动生成)。然而,lattice
继承了R 语言的一个糟糕特征,就是参数设置铺天盖地,足以让人窒息,光是一份xyplot()
函数的帮助文档,恐怕就够我们消磨一天时间了,更重要的是,lattice
仍然面向特定的统计图形,像基础图形系统一样,有直方图、箱线图、条形图等等,它没有一套可以让数据分析者说话的语法。
那么数据分析者是怎样说话的呢?他们从来不会说这条线用#FE09BE
颜色,那个点用三角形状,他们只会说,把图中的线用数据中的职业类型变量上色,或图中点的形状对应性别变量。有时候他们画了一幅散点图,但马上他们发现这幅图太拥挤,是能具体看一下里面不同收入阶层的特征,所以他们会说,把这幅图拆成七幅小图,每幅图对应一个收入阶层。然后发现散点图的趋势不明显,加上回归直线,看看回归模型反映的趋势是什么,或者发现图中离群点太多,做一下对数变换,减少大数值对图形的主导性。
从始至终,数据分析者都在数据层面上思考问题,而不是拿着水彩笔和调色板在那里一笔一划作图,而计算机程序员则倾向于画点画线。Leland
Wilkinson
的著作在理论上改善了这种状况,他提出了一套图形语法,让我们在考虑如何构建一幅图形的时候不再陷在具体的图形元素里面,而是把图形拆分为一些互相独立并且可以自由组合的成分。这套语法提出来之后他自己也做了一套软件,但显然这套软件没有被广泛采用;幸运的是,Hadley
Wickham 在R语言中把这套想法巧妙地实现了。
为了说明这种语法的思想,我们考虑图形中的一个成分:坐标系。常见的坐标系有两种:笛卡尔坐标系和极坐标系。在语法中,它们属于一个成分,可自由拆卸替换。笛卡尔坐标系下的条形图实际上可以对应极坐标系下的饼图,因为条形图的高可以对应饼图的角度,本质上没什么区别。因此在ggplot2
中,从一幅条形图过渡到饼图,只需要加极少量的代码,把坐标系换一下就可以了。如果我们用纸笔模型,则可以想象,这是不同的两幅图,一幅图里面要画的是矩形,另一幅图要画扇形。
更多的细节在本书中会介绍,这里我们只是简略说明用语法画图对用纸笔画图来说在思维上的优越性;前者是说话,后者是说字。
……