学径XUEJING · 个人学习平台通知设置

课程库 AI 主线 数据可视化 › 第 3

让图表能见人 —— 标题、标签、配色、导出

普通课60 分钟

本课导读

一张图从"自己能看"到"能进周报",差的是装裱:说人话的标题、有单位的轴、克制的配色、清晰的标注。本课给你一张五步装裱清单 + 配色三原则,最后学会把图导出成文件。规矩不多,但每条都直接决定"老板扫一眼是皱眉还是点头"。预计 60 分钟。

装裱前后:亲眼对比

同一份数据,毛坯房 vs 精装修:

Python

两张图信息一样,可读性天差地别。五步装裱清单,画完任何图对着过一遍:

  1. 标题带结论——《线上全年反超线下》好过《2026 销售数据》:标题是图的第一结论位,别浪费在复述文件名上
  2. 轴有名字和单位——没有单位的 590 是 590 元还是 590 万?读者不该猜
  3. 图例——多系列必配(上节课的规矩,进清单)
  4. 淡网格——grid(axis="y", alpha=0.3):横向淡线帮眼睛对齐读数,alpha 调淡不喧宾
  5. 纵轴诚实——比较类图 set_ylim(0, None) 从 0 起(上上课的伦理,落成代码)

配色三原则

matplotlib 默认色(那套蓝橙绿)其实相当能打,配色的关键是克制

Python
  • 原则一:一图一重点——想强调谁,就只给谁颜色,其余降灰。五颜六色 = 没有重点
  • 原则二:别用红绿表达非涨跌信息——红绿留给"涨/跌、好/坏"这类共识语义(且注意红绿色盲读者,重要处配文字标注)
  • 原则三:系列少就用默认色——matplotlib 默认循环色是设计师调过的,两三个系列直接用,别自己发明彩虹

顺手学到的 ax.bar_label(ax.containers[0])柱顶标数值——有了它连网格都可以省,周报图的常客。

文字太挤:旋转与换行

类别名一长,x 轴文字互相打架。两个救法:

Python

优先级:能 barh 就 barh,旋转是竖版实在改不了时的补救(旋转 45 度以上的标签读起来都费劲)。

导出:把图变成文件

图要进周报/PPT,最后一步是导出——喊画框(fig)来干:

Python

记两个参数就够:dpi 管清晰度,bbox_inches="tight" 裁白边——后者忘了的图贴进 PPT 总有一圈迷之空白。本地跟练时运行完就能在文件夹里看到 PNG。

✍️ 练习

练习 1:装裱毛坯房

这张毛坯图五步装裱一步没做。对照清单全部补上(标题请带结论——先看数据再想标题说什么)。

Python
✅ 参考答案
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:强调色 + 数值标注

部门满意度调查如下。用"全灰 + 一个强调色"突出最低分的部门(这次要暴露问题而不是表扬冠军),柱顶标数值,标题点出问题。

Python
✅ 参考答案
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、裁白边),并打印文件大小验证导出成功。

Python
✅ 参考答案
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 就能直接拖进周报——从原始数据到可交付图片,全流程你已打通。

📝 随堂测验

随堂测验0 / 5 题正确

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 替你写绘图代码,而你负责说清需求和验收成品。

划选正文任意文字可高亮、批注或加入复习卡

讨论

载入中…