序言

小时候,若论歌坛最火爆的青春偶像组合,非小虎队莫属。唱片销量动辄百万,红遍两岸三地乃至海外,一时风光无二。可惜的是,中途苏有朋考学,陈志朋参军,小虎队的事业在顶峰中断,待二人归来三人重组时,歌坛已是另一番气象,再也难觅他们的位置。等我年龄长到足够听小虎队的歌的时候,他们早已风流不再,令人叹惋。

读谢益辉的《现代统计图形》一书,我有类似感觉。

《现》动笔于 12 年前,农历丁亥年。彼时的 R 语言,版本 2.x,安装文件只有 30 M,CRAN 上扩展包区区三千,ggplot2 尚在襁褓之中。书中绝大部分作图,都是用基础包完成,借图来讲述统计思想和绘图哲学。无论“道”还是“术”,此书均有醍醐灌顶的功效。可惜的是,因为种种原因,此书未能出版,就这样被尘封了。

当蜻蜓不再飞翔 当蝴蝶不再流浪

我的心已告别青苹果 只有爱依旧灿烂

— 小虎队《再见》

一个轮回如白驹过隙,转眼己亥年至。跟如今的 R 语言,几经变迁,版本升至 3.6.x,CRAN 上的扩展包增长了四倍。以 ggplot2 为代表的极乐净土(Tidyverse)派横空出世,在作图、数据清理、编程等多个领域大放异彩,颇有一统江湖的味道。相比之下,《现》里用的基础包代码,读来恍若隔世古文。

益辉慷慨地将书稿全部代码开源。幸运的是,书中嵌入的代码绝大多数竟然还能顺利运行;惊讶的是,基础包做出的图片依旧美轮美奂;更有甚者,文字里的思想仍然走在时代前端。

任凭沧海桑田,星光依旧灿烂。

你永远都是我的最初 永远都是我的开始

就像天和地 永远彼此承诺彼此

曾经愁怅地回顾 曾经辛酸地祝福

都在有情岁月里 写下一页永恒的故事

— 小虎队《星光依旧灿烂》

在一番轰轰烈烈的打捞工作之后,这本书以崭新的面貌展现在我们面前,令 R 语言华语用户精神为之一振。然而,眼下 ggplot2 极为流行,有些用户可能对书中的基础作图函数不够熟悉,可能不容易接受;也可能有 Base R 用户希望了解和掌握同一图在 ggplot2 里如何实现,只是苦于没有一本有趣的入门书。

所以,我们以《现》为基础,保留其中的统计和作图思想,在尽量保留初版文字的基础上,将插图全部用 ggplot2 重绘一遍,并尽量详细讲解代码含义,一来在更大范围内推广《现》中体现的统计和作图思想,二来方便 R 用户对 Base R和 ggplot2 的作图方法对比学习,掌握这两种风格迥异、各有长短的利器。

让我们调个色彩

打扮青春缤纷的年代

让我们画个未来

填充青春每一格空白

— 小虎队《星星的约会》

几位作者的贡献分列如下(更新中):

  • 谢益辉完成了本书初版《现代统计图形》;
  • 黄湘云和赵鹏将书稿迁至 bookdown 框架,进行了修订,更新了部分失效代码;
  • 赵鹏和张列弛将插图以 ggplot2 重绘。

古书着上鲜墨,但求博君一乐;

旧瓶装进新酒,且看味道如何。

赵鹏
于 Mainz

第一版序言

我们常说“一图胜千言”,然而现实情况是我们了解的图形种类太少、使用的作图工具缺乏灵活性,这在很大程度上制约了统计图形的发展,使得统计图形在数据分析中应有的潜力没有被充分挖掘出来,正是这样的背景催生了本书的写作。

本书根据统计图形制作的需要,将所有内容分为七章:第一章先选择性回顾历史上几幅著名统计图形,在欣赏前人智慧的基础上说明统计图形在社会生活的各个方面所能体现的价值;第二章介绍图形工具,本书主要以R软件为制图工具,因此本章也会介绍关于R语言的一些基础知识;第三章讲解基础图形元素的使用,包括点、线、多边形、颜色和文本等,本章会给那些期望能自定义统计图形的读者提供方便的解决方案;第四章是本书的一大核心,集中介绍讲解现有的统计图形种类如常见的直方图、条形图、茎叶图、饼图、箱线图等,此外还会引入若干较特殊和不太常见的图形种类和数据图示方法,并且配以相应的统计数据分析实例深入说明统计图形的用法和含义;第五章介绍基础图形系统(base graphics)之外的其它图形系统如 grid、lattice 和 ggplot2 ;第六章从数据的角度对各种统计图形给出一些应用实例并作出归纳总结,以便让读者清楚区分统计图形运用的条件和场合;第七章总结分析了绘制统计图形的一些指导原则;附录??是为R新手提供的编程入门资料;附录??详细介绍了基础图形系统的图形参数和一些作图技巧,用以对图形进行细节调整;附录??介绍了如何用R编写图形界面。

本书可以从任意章节开始读,各章节之间没有严格的逻辑依赖关系。对于熟悉或喜爱编程的读者,本书可按顺序从前往后阅读;对于不熟悉编程并且对编程不感兴趣的读者,本书阅读顺序可以是:第一章、第八章、第七章、第五章,其余章节可选择性阅读或放弃阅读。对于有统计学理论基础的专业人士,应该更加关注第五章中的统计方法和图形的对应关系;对于非统计专业人士,第七章的数据案例可能会带来一些启示。书中有若干例“彩蛋”,它们与统计学几乎没什么关系,仅供娱乐消遣,但也可作为学习函数使用方法的参考。对于根本无暇阅读本书的读者,仅仅了解本书要传达的部分观点也无妨:

  1. 我们对统计图形可以有完全的控制,这种“自由”在某些情况下很重要,但我们的大脑永远比我们的工具重要;

  2. 我们最熟悉的饼图有它自身设计的巧妙 - 切分一个\(360\,^{\circ}\)的圆圈给人以形象的“比例”展示,然而它表达数据的实际效果却不如条形图或 Cleveland 点图,因为人眼对角度大小的敏感性不如长度。我们应该尽量避免用饼图,无论我们多熟悉它。不过这种巧妙的设计却可以被用在其它场合,如提灯女士的玫瑰图(??小节);

  3. 尽量避免3D图形,除非它是可以交互操作的。三维立体图形看起来很炫很时髦,但它的缺点也是很明显的 — 对于静态的三维图形,我们在二维媒介上只能看到它的一个侧面,这样可能会隐藏一些数据信息。大多数情况下,三维图形可以被等高线代替(1.8小节),后者可以让我们从平面上看到所有信息;如果需要使用三维图形,可以考虑rgl包等动态图形系统(??小节),这样我们的图形可以任意旋转角度、缩放;

  4. 大多数情况下,将连续数据分组是很糟糕的数据处理方式,例如将年龄数据分为 0-10 岁、 10-20 岁等,这一点在作图的数据预处理中尤其常见,我们应该尽量避免这种损失数据信息的处理方式,不能为了作图而作图:即让图形去配合数据,而不能让数据去配合图形;

  5. 设计统计图形需要综合考虑数据处理、统计模型和用户心理等,任何一个环节上的失误或偏颇,都可能使图形带来相反的作用 — 不仅不能展示数据中的信息,反而带来误导。“一图胜千言”也有其前提。有些读者可能还记得 1986 年美国挑战者号航天飞机的那场灾难,灾难的原因只是因为飞机上一种小零件“O型环”出了故障,这个故障本来可以用更合适的图形揭示出来,但一幅错误的图形误导了科学家们,这个误导间接促成了发射的决策,最终的代价是航天飞机在发射后 73 秒解体、机上 7 名宇航员全部罹难;

  6. 数学只是研究统计学的一种角度,它奠定了统计学的理论基础,但这不是统计学的终点或全部;

本书的所有图形文件和程序代码可以从作者的个人主页下载(http://yihui.name/cn/publication/),另外本书也配有相应的 R 包 MSG (Xie 2016), 使用说明参见附录??。阅读本书过程中若有任何疑问请 Email 联系作者:

关于本书中R程序代码,记号说明如下:

>
表示一段R程序的开始;在R中可以用options(prompt = '> ')设置程序行的起始符号,默认为“>”;后文中只要遇到这个标记,则说明该标记之后的程序语句可以直接在R中运行(读者在运行书中的示例时不要把这个符号也敲进命令行中)
+
续行符;当一段程序在某一行中没有完整显示出来时,就会折到下一行,此时R会以“+”表示程序语句上不完整,正在继续
[n]
其中“n”表示一个整数,中括号括上一个整数表示R程序输出的行号,比如[1]表示这是第1行输出
#
表示R程序注释,即不会被执行的语句(为了增强程序的可读性而写的文字)

电子版读者可以用按住Alt键再用鼠标选中除去>和+的代码。另外,本书R代码以等宽正体排版,代码中带有程序起始符以及续行符,并且用不同颜色分别标记函数、参数、数字、字符和注释等部分;代码输出则不带高亮,例:

## 
## Call:
## lm(formula = counts ~ altitude, data = PlantCounts)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -27.631 -10.272  -3.777   6.491  65.788 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -26.67224    6.45287  -4.133 4.09e-05 ***
## altitude      0.08159    0.01107   7.372 5.61e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 15.3 on 598 degrees of freedom
## Multiple R-squared:  0.08331,    Adjusted R-squared:  0.08178 
## F-statistic: 54.35 on 1 and 598 DF,  p-value: 5.615e-13

正文中的代码以等宽正体表示,如 inline R code,函数名称以斜体表示,如 function(),对象类名称和参数名称用无衬线字体表示,如class using sans serif,R程序包用粗体表示,如 package

本书以 LaTeX 结合 R(Sweave,参见 Leisch (2002) )写成,所有图形均为 R 代码动态生成,因此整本书稿具有可重复性(reproducible),读者可从网上下载书稿源代码并配合适当的工具编译生成本书稿。本书的大部分图形都直接附带有源代码,少数图形的源代码被放在 MSG 包的演示中,当代码为 demo('topic', package = 'MSG')形式时,读者在 R 中运行这句代码就可以看到源代码和相应的图形输出。当我们介绍一个函数的用法时,通常会使用一个usage()函数,它在R包 formatR 中。

顾炎武在《日知录》中有一句话:“形而上者谓之道,形而下者谓之器。”对本书来讲,统计作图的(计算机)技术本身即为“器”,而数据处理以及统计图形的灵活应用则为“道”。本书的写作目的正是希望能够基于“器”的练习和启发,让读者在统计数据处理和分析中真正得“道”,使统计图形在数据的探索分析中发挥福尔摩斯探案般的功效。

谢益辉
于 Ames, Iowa

参考文献

Leisch, Friedrich. 2002. “Sweave: Dynamic Generation of Statistical Reports Using Literate Data Analysis.” In Compstat 2002 — Proceedings in Computational Statistics, edited by Wolfgang Härdle and Bernd Rönz, 575–80. Physica Verlag, Heidelberg. http://www.stat.uni-muenchen.de/~leisch/Sweave.

Xie, Yihui. 2016. MSG: Data and Functions for the Book Modern Statistical Graphics. https://CRAN.R-project.org/package=MSG.