7.3 标签、尺度、注释与不确定性
一幅图即使数学上正确,如果读者无法识别总体、单位、系列或视觉尺度,也不能成为有效证据。好图应当在脱离生成它的 notebook 单元格后仍能独立阅读。
为图表提供阅读契约
完整图表通常要回答五个问题:
1. 正在展示什么比较或发现?
2. 每条轴测量什么变量,使用什么单位?
3. 每个图形标记属于哪个系列或群体?
4. 数据来自哪里,包含哪些过滤和时间范围?
5. 数值是观测、估计、标准化结果,还是带有不确定性?
标题应具体说明问题,不要只写“结果”:
from matplotlib.ticker import StrMethodFormatter
fig, ax = plt.subplots(figsize=(8, 5), layout="constrained")
ax.plot(monthly["month"], monthly["north"], marker="o", label="北区")
ax.plot(
monthly["month"], monthly["south"],
marker="s", linestyle="--", label="南区",
)
ax.set(
title="2026 年 1–6 月各区域已完成销售额",
xlabel="月份",
ylabel="销售额(元)",
)
ax.yaxis.set_major_formatter(StrMethodFormatter("¥{x:,.0f}"))
ax.legend(title="区域", frameon=False)
fig.text(
0.01,
0.01,
"来源:订单仓库;仅完成订单;更新于 2026-07-02",
fontsize=8,
)多个 Artist 在图中重复出现时,图例很有用;把文字直接放在线尾附近,则能减少视线往返。不能只用颜色区分系列。应组合颜色、线型、标记形状、直接标签或小多图,让图在色觉差异、灰度打印和投影条件不佳时仍可阅读。
刻度的职责是帮助解码位置,而不是装饰。应使用 locator 与 formatter,不要只替换刻度文字而不匹配刻度位置。网格线有助于比较数值轴,但视觉层级应低于数据。
明确说明尺度转换
在线性轴上,相等视觉距离代表相等加法差值;在以 10 为底的对数轴上,相等距离代表相同比率:
在 Axes 上设置尺度,并通过标题、轴标签、图注或刻度结构告诉读者:
assert metrics["latency_ms"].gt(0).all()
fig, ax = plt.subplots(layout="constrained")
ax.plot(metrics["week"], metrics["latency_ms"], marker="o")
ax.set_yscale("log")
ax.set(
title="每周延迟(对数尺度)",
xlabel="周",
ylabel="延迟(毫秒,对数尺度)",
)普通对数轴不能显示零或负值。不要为了能画而秘密加常数。应先调查这些值是否有效,再选择有依据的过滤、继续使用线性轴,或在符合分析需求时使用 symlog 等尺度。
跨多个数量级时,对数轴很有帮助,但它会让较大的绝对差值看起来更紧凑。把线性与对数视图并排,可以识别哪些结论依赖尺度。
用注释标记证据,不制造因果
ax.annotate 会用文字连接数据位置。xy 指定目标,xytext 与 textcoords 决定标签位置:
ax.annotate(
"版本发布",
xy=(release_date, release_latency),
xytext=(14, 28),
textcoords="offset points",
arrowprops={"arrowstyle": "->"},
)这条注释只记录已知事件时间,并不能证明发布导致了之后的变化。文字和箭头都不应把时间巧合变成因果故事。
不确定性也是证据。errorbar 可以接收对称误差,或分别给出上下误差长度:
import numpy as np
mean = summary["mean"].to_numpy()
low = summary["ci_low"].to_numpy()
high = summary["ci_high"].to_numpy()
yerr = np.vstack([mean - low, high - mean])
assert np.all(yerr >= 0)
ax.errorbar(
summary["week"],
mean,
yerr=yerr,
fmt="o-",
capsize=4,
)图或图注必须说明误差条表示标准差、标准误、预测区间还是置信区间;相关时还要说明置信水平、样本量和计算方法。误差条是在一组假设下描述不确定性,不是判断两组是否“不同”的万能阈值。
标签与注释会争夺有限空间。7.4 节将组织多个面板的空间,并把可复用绘图逻辑与局部样式、导出决策分开。