前言

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

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

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

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

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

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

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

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

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

本书的所有图形文件和程序代码可以从 Github 仓库下载(https://github.com/XiangyunHuang/MSG-Book),另外本书也配有相应的 R 包 MSG (Xie 2020), 使用说明参见附录 ??。阅读本书过程中若有任何疑问请 Email 联系作者:

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

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

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

library(MSG) # 加载本书配套的 R 包 MSG
data(PlantCounts) # 加载数据供下面的回归模型使用
summary(fit <- lm(counts ~ altitude, data = PlantCounts))
## 
## 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 中。

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

谢益辉
于美国奥马哈

参考文献

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.
———. 2020. MSG: Data and Functions for the Book Modern Statistical Graphics. https://github.com/yihui/MSG.