The Grammar of Graphics - Leland Wilkinson

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 的贡献在于将可视化从经验层面提升到了理论层面。就像语法帮助我们理解和生成无限多的句子一样,图形语法帮助我们理解和创建无限多的图表。
对于前端开发者来说,这本书的价值在于:
- 理解可视化库的设计思想:ggplot2、D3.js、G2 等库都深受其影响
- 建立系统性思维:学会将复杂图表分解为基本组件
- 提升设计能力:理解为什么某些图表组合有效,某些无效
虽然书中的数学公式和统计理论可能对部分读者有门槛,但其核心思想——可视化是由独立组件组合而成的——是每位前端开发者都应该理解的基础知识。
在实际工作中,当我使用 G2 或 ECharts 时,图形语法的思想帮助我更快速地理解 API 设计,更灵活地组合出所需的图表类型。这就是理论指导实践的力量。