Skip to main content

The Grammar of Graphics - Leland Wilkinson

AJ9WUq

The Grammar of Graphics 是数据可视化领域的经典著作,提出了图标的语法理论,为现代可视化设计奠定了理论基础。

关于作者

Leland Wilkinson 是数据可视化和统计学领域的权威专家:

  • 图灵奖得主:因对统计学和数据可视化的贡献获得认可
  • 芝加哥大学教授:长期从事统计学和计算机科学教学研究
  • SYSTAT 创始人:开发了知名的统计分析软件
  • 可视化理论先驱:提出的"图形语法"理论影响深远

Wilkinson 的"图形语法"理论将可视化图表分解为一套独立的语法组件,这一思想直接启发了后来的 ggplot2、D3.js 等知名可视化库。

核心概念

1. 图形语法七要素

1. 数据 (Data)
- 可视化的基础素材
- 可以是表格、数组、对象等

2. 变量 (Variables)
- 数据中的字段或属性
- 分为自变量和因变量

3. 标度 (Scales)
- 将数据映射到视觉通道
- 如线性标度、对数标度

4. 坐标系统 (Coordinate System)
- 定义图形的空间框架
- 如笛卡尔坐标系、极坐标系

5. 几何对象 (Geometric Objects)
- 可视化的基本图形元素
- 如点、线、面、柱

6. 美学映射 (Aesthetic Mappings)
- 数据到视觉属性的映射
- 如颜色、大小、形状

7. 统计变换 (Statistical Transformations)
- 数据的预处理和聚合
- 如求和、平均、分箱

2. 图层概念

图层 = 数据 + 几何对象 + 美学映射

一个完整的图表由多个图层叠加而成:

图层 1:背景网格
图层 2:数据点(散点)
图层 3:趋势线(回归线)
图层 4:置信区间(面积)

3. 视觉通道

常见的视觉通道(按感知精度排序):

1. 位置(最精确)
- 点在 x/y 轴上的位置

2. 长度
- 柱状图的高度

3. 角度
- 饼图的扇形角度

4. 面积
- 气泡图的大小

5. 颜色饱和度
- 热力图的深浅

6. 颜色色调(最不精确)
- 分类数据的区分

4. 标度类型

// 常见标度类型
const scales = {
// 连续标度
continuous: 'linear | log | sqrt | power',

// 离散标度
discrete: 'ordinal | nominal',

// 时间标度
temporal: 'time | date',

// 分位数标度
quantile: 'quantile | quantize | threshold'
};

对现代库的影响

ggplot2 (R)

# ggplot2 直接实现了图形语法
ggplot(data = mpg, aes(x = displ, y = hwy)) +
geom_point() + # 几何对象:点
geom_smooth() + # 几何对象:平滑线
scale_color_manual() + # 标度:自定义颜色
theme_minimal() # 主题:极简风格

D3.js

// D3.js 体现了图形语法思想
const svg = d3.select('svg');

// 标度
const xScale = d3.scaleLinear()
.domain([0, 100])
.range([0, width]);

// 几何对象(圆形)
svg.selectAll('circle')
.data(data)
.enter()
.append('circle')
.attr('cx', d => xScale(d.x)) // x 位置
.attr('cy', d => yScale(d.y)) // y 位置
.attr('r', d => d.size) // 大小
.attr('fill', d => color(d.cat)); // 颜色

AntV G2

// G2 明确采用了图形语法设计
const chart = new Chart({ container: 'container' });

chart
.interval() // 几何对象:柱状图
.data(data) // 数据
.encode('x', 'category') // x 轴编码
.encode('y', 'value') // y 轴编码
.encode('color', 'category'); // 颜色编码

经典摘录

A grammar of graphics is a tool that enables us to describe the components of a statistical graph in a systematic way.

The grammar helps us understand how the parts of a statistical graph fit together to form a coherent whole.

With a grammar, we can describe any statistical graphic as a combination of independent components.

读书心得

《The Grammar of Graphics》是一本理论性很强的著作,初读可能觉得抽象,但深入理解后会发现其思想的强大之处。

Wilkinson 的贡献在于将可视化从经验层面提升到了理论层面。就像语法帮助我们理解和生成无限多的句子一样,图形语法帮助我们理解和创建无限多的图表。

对于前端开发者来说,这本书的价值在于:

  1. 理解可视化库的设计思想:ggplot2、D3.js、G2 等库都深受其影响
  2. 建立系统性思维:学会将复杂图表分解为基本组件
  3. 提升设计能力:理解为什么某些图表组合有效,某些无效

虽然书中的数学公式和统计理论可能对部分读者有门槛,但其核心思想——可视化是由独立组件组合而成的——是每位前端开发者都应该理解的基础知识。

在实际工作中,当我使用 G2 或 ECharts 时,图形语法的思想帮助我更快速地理解 API 设计,更灵活地组合出所需的图表类型。这就是理论指导实践的力量。