让图表能见人 —— 标题、标签、配色、导出
普通课约 60 分钟
本课导读
一张图从"自己能看"到"能进周报",差的是装裱:说人话的标题、有单位的轴、克制的配色、清晰的标注。本课给你一张五步装裱清单 + 配色三原则,最后学会把图导出成文件。规矩不多,但每条都直接决定"老板扫一眼是皱眉还是点头"。预计 60 分钟。
装裱前后:亲眼对比
同一份数据,毛坯房 vs 精装修:
两张图信息一样,可读性天差地别。五步装裱清单,画完任何图对着过一遍:
- 标题带结论——《线上全年反超线下》好过《2026 销售数据》:标题是图的第一结论位,别浪费在复述文件名上
- 轴有名字和单位——没有单位的 590 是 590 元还是 590 万?读者不该猜
- 图例——多系列必配(上节课的规矩,进清单)
- 淡网格——
grid(axis="y", alpha=0.3):横向淡线帮眼睛对齐读数,alpha 调淡不喧宾 - 纵轴诚实——比较类图
set_ylim(0, None)从 0 起(上上课的伦理,落成代码)
配色三原则
matplotlib 默认色(那套蓝橙绿)其实相当能打,配色的关键是克制:
- 原则一:一图一重点——想强调谁,就只给谁颜色,其余降灰。五颜六色 = 没有重点
- 原则二:别用红绿表达非涨跌信息——红绿留给"涨/跌、好/坏"这类共识语义(且注意红绿色盲读者,重要处配文字标注)
- 原则三:系列少就用默认色——matplotlib 默认循环色是设计师调过的,两三个系列直接用,别自己发明彩虹
顺手学到的 ax.bar_label(ax.containers[0]):柱顶标数值——有了它连网格都可以省,周报图的常客。
文字太挤:旋转与换行
类别名一长,x 轴文字互相打架。两个救法:
优先级:能 barh 就 barh,旋转是竖版实在改不了时的补救(旋转 45 度以上的标签读起来都费劲)。
导出:把图变成文件
图要进周报/PPT,最后一步是导出——喊画框(fig)来干:
记两个参数就够:dpi 管清晰度,bbox_inches="tight" 裁白边——后者忘了的图贴进 PPT 总有一圈迷之空白。本地跟练时运行完就能在文件夹里看到 PNG。
✍️ 练习
练习 1:装裱毛坯房
这张毛坯图五步装裱一步没做。对照清单全部补上(标题请带结论——先看数据再想标题说什么)。
✅ 参考答案
import matplotlib.pyplot as plt
months = ["1月", "2月", "3月", "4月", "5月", "6月"]
new_users = [420, 480, 690, 1150, 1580, 2100]
fig, ax = plt.subplots(figsize=(6, 3.2))
ax.plot(months, new_users, marker="o", linewidth=2)
ax.set_title("新增用户三月起加速增长,半年翻五倍")
ax.set_xlabel("月份")
ax.set_ylabel("新增用户(人)")
ax.grid(axis="y", alpha=0.3)
ax.set_ylim(0, None)
标题对照:《月度新增用户》只是文件名,《三月起加速增长,半年翻五倍》才是结论——你的读者只给这张图三秒钟。
练习 2:强调色 + 数值标注
部门满意度调查如下。用"全灰 + 一个强调色"突出最低分的部门(这次要暴露问题而不是表扬冠军),柱顶标数值,标题点出问题。
✅ 参考答案
import matplotlib.pyplot as plt
depts = ["设计", "运营", "销售", "客服"]
scores = [4.5, 4.2, 4.4, 3.1]
colors = ["#c9cdd4"] * len(depts)
colors[scores.index(min(scores))] = "#e8734a" # 程序自己找最低分(别硬编码下标)
fig, ax = plt.subplots(figsize=(6, 3))
ax.bar(depts, scores, color=colors)
ax.bar_label(ax.containers[0], fmt="%.1f")
ax.set_title("客服满意度显著低于其他部门,需要关注")
ax.set_ylim(0, 5)
scores.index(min(scores)) 让代码自己定位最低分——数据一更新强调色自动跟着走,不用改代码。
练习 3:出货(挑战)
把练习 2 的成品图导出为 dept_report.png(dpi=200、裁白边),并打印文件大小验证导出成功。
✅ 参考答案
import matplotlib.pyplot as plt
from pathlib import Path
depts = ["设计", "运营", "销售", "客服"]
scores = [4.5, 4.2, 4.4, 3.1]
colors = ["#c9cdd4"] * len(depts)
colors[scores.index(min(scores))] = "#e8734a"
fig, ax = plt.subplots(figsize=(6, 3))
ax.bar(depts, scores, color=colors)
ax.bar_label(ax.containers[0], fmt="%.1f")
ax.set_title("客服满意度显著低于其他部门")
fig.savefig("dept_report.png", dpi=200, bbox_inches="tight")
print(f"导出成功:{Path('dept_report.png').stat().st_size // 1024} KB")
本地跟练时,这个 PNG 就能直接拖进周报——从原始数据到可交付图片,全流程你已打通。
📝 随堂测验
1. “标题带结论”的意思是?
2. 轴标签必须带什么才算合格?
3. “全灰 + 一个强调色”的配色手法体现什么原则?
4. ax.bar_label(ax.containers[0]) 的作用是?
5. savefig 时 bbox_inches="tight" 是为了?
本课小结
- 五步装裱清单:标题带结论、轴名+单位、图例、淡网格、纵轴从 0——画完过一遍
- 配色三原则:一图一重点(灰底强调色)、红绿留给涨跌、系列少用默认色;
bar_label柱顶标数 - 文字打架:优先 barh,其次 rotation
- 导出:
fig.savefig("x.png", dpi=200, bbox_inches="tight")
会画也会装裱了——下一课换个姿势:让 AI 替你写绘图代码,而你负责说清需求和验收成品。
划选正文任意文字可高亮、批注或加入复习卡
讨论
载入中…