MATPLOTLIB · 第 3 章 · 深度解读

图表辅助元素的定制

数据负责呈现事实,辅助元素负责构建理解——一张图表的说服力,往往不取决于图形本身,而取决于你为它选择的"语境"。

8
种辅助元素
4
个功能层次
11
个核心 API
3.1 认识辅助元素

8 种元素,4 个功能层次

辅助元素不是装饰,而是一套"视觉修辞系统"。按功能可归为四个层次:定义空间的、引导阅读的、提供参照的、直接解释的。

元素的选择本身就是一种表达

同样是展示成绩,加一条 88.5 分的参考线,读者立刻能看到"谁在平均线之上"——信息没有变,但结论自己浮现了。

过犹不及

支付宝月账单饼图把每个扇形的含义都标在圆外,文字长短不一、数量偏多,反而让图表显得杂乱——标注应迁入图例。

辅助元素服务于"比较"

散点图中远离坐标轴的圆点难以读数,添加网格后,数值可估;柱形图缺少数值,添加注释后,无需心算。

3.2 坐标轴定制

空间的语言:标签、刻度范围与刻度标签

坐标轴由刻度标签、刻度线、轴脊、坐标轴标签四部分组成,是读者最先"解码"的元素。核心 API:xlabel() / ylabel()、xlim() / ylim()、xticks() / yticks()。

正弦曲线与余弦曲线

LaTeX 刻度 + 指向型注释
将刻度标签换成 -π, -π/2, 0, π/2, π 的数学表达,并用箭头注释标注最小值——刻度的"单位语言"决定读者的理解成本。
用 r'$-\pi$' 这类 mathtext 字符串替代 1.5708 这样的坐标刻度,读者不再需要在数字与"π/2"之间做换算。

实例 1 · 2019 年内地电影票房 TOP8

barh + 刻度标签即数据
电影名直接作为 y 轴刻度标签(而非 x 轴),条形长度编码票房——类别名横向排布更易读,是条形图优于柱形图的经典场景。
当类别名称较长时,把刻度标签放在 y 轴可以避免文字倾斜或截断,这是"反向利用坐标轴"的典型技巧。
3.3 – 3.4 标题 · 图例 · 网格

阅读的导航:先说清"是什么",再帮读者"读准数"

标题回答"这张图讲什么"(title()),图例回答"哪种颜色是谁"(legend()),网格回答"这个点大约是多少"(grid())——三者层层递进,缺一则读者每一步都要猜。

实例 3 · 汽车速度与制动距离

散点图 + 双向网格
原始散点图中,很多圆点距坐标轴较远、无法准确读数;添加垂直 + 水平网格并补上轴标签后,每个点都能被定位。
网格的价值在于"估算"而非"精确"——linewidth=0.3 的细线足够,过粗的网格会与数据争夺注意力。
3.5 参考线与参考区域

比较的锚点:给读者一个"基准"

参考线(axhline() / axvline())标记特殊值:目标线、平均线、预算线;参考区域(axhspan() / axvspan())标记特殊范围。它们是图表中唯一"先于数据存在"的语义——先有标准,才有好坏。

实例 4 · 高二各班男女生英语成绩

平均分参考线 88.5
全体高二英语平均成绩 88.5 分画成水平参考线后,各班男女生成绩不再是一堆数字,而是"高于/低于基准"的判断。
没有参考线时,读者必须自行记忆并比较 12 个数字;有参考线后,视觉比较取代了工作记忆——这就是辅助元素降低认知负荷的方式。
3.6 注释文本

解释的艺术:指向型讲"点",无指向型讲"面"

指向型注释(annotate() + arrowprops)用箭头锁定具体图形;无指向型注释(text())直接书写说明。配合 $...$ 数学字符串,matplotlib 可自动解析表达式。

实例 5 · 2013—2019 财年阿里 GMV

柱顶无指向型注释
在每个柱形顶部标注具体数值:五位数之间的差距(11,000 → 58,240)凭柱高只能感知趋势,凭注释才能复述事实。
"趋势靠眼、数字靠标"——柱形图与注释文本是教材中最常见的组合:图形给直觉,文本给证据。
3.7 添加表格

精确的补充:当图形不够"准"时

table() 可在图表中嵌入自定义样式表格(cellText / colWidths / rowLabels / colLabels / loc),用于强调难理解的数据。

实例 6 · 果酱面包配料比例

饼图 + 表格
饼图擅长展示占比,但对"酵母 3g 与盐 3g"这类占比极小却重要的项几乎无法分辨——表格补上了精确重量这一维度。
图形与表格不是二选一:图形传达结构(谁大谁小),表格传达精度(差多少克),二者互补才完整。
API 速查

11 个核心函数

每个函数都有对应的 Axes 对象方法(如 set_xlabel()),参数用法相同,面向对象写法更适合多子图场景。

函数用途关键参数
xlabel() / ylabel()设置 x / y 轴标签xlabel, fontdict, labelpad
xlim() / ylim()设置或获取刻度范围left / right, xmin / xmax
xticks() / yticks()设置刻度线位置和刻度标签ticks, labels
title()添加图表标题label, loc, pad
legend()添加图例(需先指定 label 或传 handles/labels)handles, labels, loc, title, shadow
grid()显示网格b, which, axis, linewidth
axhline() / axvline()添加水平 / 垂直参考线y 或 x, xmin / xmax, linestyle
axhspan() / axvspan()添加水平 / 垂直参考区域ymin / ymax 或 xmin / xmax, alpha
annotate()添加指向型注释文本s, xy, xytext, arrowprops(width / arrowstyle…)
text()添加无指向型注释文本x, y, s, bbox
table()添加数据表格cellText, cellColours, colWidths, rowLabels, colLabels, loc

写在最后

辅助元素的本质是把读者的认知成本转移到设计者的选择上:坐标轴定义空间,标题与图例引导阅读,网格与参考线提供估算与比较的标尺,注释与表格补足精确性。理解每种元素的用途与边界,才能为图表选择"恰到好处"的辅助——少一分晦涩,多一分冗余。

坐标轴标题图例 网格参考线参考区域 注释文本表格