【读书笔记】The Grammar of Graphics - 2. How to make a pie

2. 绘制一张饼图

本章主要介绍如何用图形语法的思想完成从源数据到最终图形的完整工作流。

figure2.1.png
简单的讲,整个过程就是从数据源提取数据,进过”make a pie”的过程,生成图形,最终交给渲染器渲染。
对于”make a pie”的具体过程,作者给出了一个具体的方案:
figure2.2.png

这张图只是展示了整个数据流的大致过程,并未包含其具体实现,而在实现中也可以有多种方案:

  • 基于流程的设计方案(在主程序中使用循环实现)
  • 基于函数的设计方案,每一个步骤由函数实现
  • 基于对象的设计方案,每一个步骤为一个对象,通过对象间进行信息交流

定义

  • Sets
  • Relations
  • Functions
  • Graphs
  • Compositions
  • Transformations
  • Algebras
  • Variables
  • Varsets
  • Frames

案例分析

create Variables

数据库中的表结构为

CaseID bias_tword_males gender

我们从数据库中导入两个字段并分别存储为Response与Gender

1
2
Response = LoadFromSQL("ACLS", "bias_tword_males", "case")
Gender = LoadFromSQL("ACLS", "gender", "case")

为了方便,我们仍然使用表格来展示提取出的结果
table1.png

Apply Algebra

在这一步,我们会对提取出的变量进行Algebra操作,在第五章会介绍到对于图形的algebra操作有三种

  • cross(*)
  • blend(+)
  • nest(/)

对于Response与Gender,我们使用cross将他们合并在一起

1
cross(Response, Gender)

table2.3.png

Apply Scales

scale(度量)是一种将数据做某种映射的操作。分类度量抓换可以使一些分类变量中的成员映射到整数集上以便操作。table2.4.png

Compute Statistics

目前一共有3835条数据,这显然不是我们在绘制饼图时直接需要的数据,这里我们需要做一定的聚合统计处理;我们将男、女分为两类,分别统计男性下各类response的计数比例与女性下各类response的计数比例。
table2.5.png

Construct Geometry

这里我们使用interval来对summary进行展示;interval会根据其高度映射对应字段的数值大小,并给出一个非零的宽度。一般,在没有特殊规定的情况下,interval的下届起始点为0。
interval.stack()可以使得interval进行累积堆叠,这实际上是按顺序改变了每一个interval对象的下界和上界的位置。
table2.6.png

Apply Coordinates

接下来我们要为图形加入坐标系;这里我们将interval从直角坐标系迁移到极坐标系中,即将(x,y)转化为(r, theta),则我们会得到饼图;通过调整映射方式,如控制宽度的映射方法,我们还可以制作出环形图,南丁格尔玫瑰图等更复杂的极坐标系下的可视化图表。
借助于图形语法,我们可以很轻松的完成对于其他视觉元素的映射;如我们可以这样在图表中运用一个颜色空间。

1
COORD: polar.theta(aesthetic(color))

需要注意的是,一个frame就是一个空间,这个空间可以不只是局限于position,而是其他所有的视觉元素构成的空间。

table2.7.png

Compute Aesthetics

现在我们已经创建了一张图,然而这张图是数学上的抽象概念,相对难以理解。Aesthetic函数使得抽象的图得以转化为实体的图形;
每一个Aesthetic函数的输入都是一个元组的集合(frame),这个元组的集合本质上就是某一个维度的成员组合;举例而言这里position的参数就是极坐标转化时的空间,该空间从interval.stack()转化而来,而转化的空间,则是从summary.proportion()中计算的来,而这又是根据对cross(Response, Gender)成员的计数得到的。
table2.8.png
Aesthetics函数的输出是图形,即渲染器在渲染图形时所需要的一系列指示,如position()的输出是将得到的元组转为各个定点的信息以便被绘制在相应的坐标系中。
根据图形语法,坐标系操作应该是可以被串联的,但有的坐标系的转化并不是可逆的;所以当我们选取了这些坐标系为默认坐标系,则会遇到问题。
这里最终会生成两个图表,这便牵扯到了图表的布局算法,这点会在稍后的章节讨论。

figure2.4.png

说明

本书的所有图表的specification均遵循以下规则(所以之前的笔记记得重新截图。。。)
statement.png

Author: Lobay Kanna
Link: http://lobay.moe/2019/01/10/GoG/2. 绘制一张饼图/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.