用 AI 辅助画图 —— 描述需求生成绘图代码的正确方式
普通课约 50 分钟
本课导读
坦白说:工作里的复杂图表,未来你多半会让 AI 写初稿。那前三课白学了吗?恰恰相反——不会画图的人向 AI 要图,像不懂菜的人点菜:说不清要什么,也尝不出好坏。本课学"向 AI 要图"的提问框架、验收 AI 产出的检查单,以及 AI 画图的三个高频陷阱。这是 U0.2"高手如何用 AI"在数据领域的落地实操。预计 50 分钟。
提问框架:四要素点菜法
对比两种问法:
❌ "帮我画个销售图"
✅ "我有一个 pandas DataFrame,列为 city(字符串)和 amount(数字),共 5 行。请用 matplotlib 画横向柱状图:按 amount 降序、最大值在最上方;标题《上海领跑各城市销售额》,x 轴标签"销售额(万元)";用 fig, ax 写法,只用 matplotlib,不要用 seaborn。"
差距在四要素,逐个拆:
- 数据长相:列名 + 类型 + 大致行数——AI 看不见你的数据,不描述它就只能瞎编列名(陷阱一的根源)
- 图型与关键细节:图型(你会选型,这是前三课给的底气)+ 排序/方向/强调等要求
- 装裱要求:标题(最好直接给出带结论的标题)、轴标签、单位——上节课的清单直接报菜名
- 技术约束:fig/ax 写法、只用 matplotlib——不约束的话 AI 爱用 seaborn(你的环境不一定装了)
提示
类比记忆:向 AI 要图 = 拿着装修清单找施工队。前三课练的是"看得懂图纸、写得出清单",AI 是那支手快的施工队——清单越细,返工越少。四要素背下来:数据长相、图型细节、装裱要求、技术约束。
验收 AI 的图:跑 → 看 → 查
AI 交码之后,三步验收(U0.5 的"AI 输出必须验证"落到画图):
三步里最容易偷懒的是③ 查:AI 的代码常夹带你没要求的东西(多余的样式、一坨看不懂的参数)。规矩是——看不懂的行,要么问 AI 讲清,要么删掉重跑验证没影响;绝不让看不懂的代码进你的交付物。这就是 U1.2"审 AI 的类"的画图版。
三个高频陷阱
陷阱一:编造列名。你没描述数据,AI 就按"常见命名"猜——df["sales"] 遇上你实际的 amount 列,当场 KeyError。药方:四要素第一条,永远先报数据长相。
陷阱二:私自引入没装的库。AI 特别爱 import seaborn as sns(训练数据里它太常见了)——你的环境没装就 ModuleNotFoundError。药方:技术约束里写明"只用 matplotlib";已经收到 seaborn 版就回一句"改写成纯 matplotlib"。
陷阱三:过度装饰。不约束时 AI 爱堆渐变色、3D 效果、五颜六色——违反你上节课的"一图一重点"。药方:装裱要求里点明配色("除强调色外用灰色"),或收货后让它"简化配色,突出 X"。
说明
发现共性了吗:三个陷阱全部源自"需求没说清"。AI 放大你的清晰,也放大你的含糊——这句话适用于你未来让 AI 干的一切活,画图只是第一站。
迭代:图是改出来的
真实流程很少一发入魂,而是"初稿 → 几轮小改"。追问句式直接给:
- "把柱子改成横向,最大值在最上面"
- "标题改成结论式:《客服满意度垫底》"
- "只保留最低的那根柱子有颜色,其他改灰色"
- "导出参数加上 dpi=200 和 bbox_inches='tight'"
每一句都是前三课的词汇表——你学的不是"画图的手艺",是"指挥画图的语言"。顺带一提:把报错原文直接贴回给 AI 也是迭代("运行报了这个错:……"),它修 bug 比你快。
✍️ 练习
练习 1:写点菜单(无代码)
你有 DataFrame:列 month(1-12 月字符串)、revenue(数字,万元)、cost(数字,万元)。想要一张"收入与成本走势对比、突出 8 月成本反超收入"的图。按四要素写出完整提问(写完对照答案)。
✅ 参考答案
"我有一个 pandas DataFrame,列为 month(字符串,1月-12月)、revenue、cost(均为数字,单位万元),12 行。请用 matplotlib 画双折线图:revenue 实线带圆点、cost 虚线;在 8 月位置加注释标出'成本反超';标题《8 月成本首次反超收入,需控本》,y 轴标签'金额(万元)',图例,纵轴从 0 开始;fig, ax 写法,只用 matplotlib。"——四要素齐 + 标题自带结论 + 装裱细节到位。你的版本只要四要素都在就合格。
练习 2:验收找茬
下面是"AI 交付"的代码,藏着本课讲过的两个陷阱。先别运行,读代码找出来;改好后运行验证。
✅ 参考答案
import pandas as pd
import matplotlib.pyplot as plt
# 陷阱二:seaborn 没装也没用到——删
df = pd.DataFrame({
"product": ["键盘", "鼠标", "显示器"],
"amount": [1794, 267, 1599],
})
fig, ax = plt.subplots(figsize=(6, 3))
ax.bar(df["product"], df["amount"]) # 陷阱一:编造列名 name,实际是 product
ax.set_title("各产品销售额")
两个陷阱的报错分别是 ModuleNotFoundError 和 KeyError——都是你能秒诊断的老朋友。验收时"先读后跑"能把它们拦在运行前。
练习 3:全流程实战(挑战)
真实演练:把下面的需求发给你常用的 AI(网页版即可),拿回代码贴到这里运行验收;不合格就按"迭代句式"追问到合格。需求——"数据:五个部门 depts 与加班小时 hours(见起始代码);画横向柱状图突出加班最多的部门(其余灰色),柱顶标数值,标题带结论,只用 matplotlib"。
✅ 参考实现(AI 合格产出大致长这样)
import matplotlib.pyplot as plt
depts = ["设计", "运营", "销售", "客服", "行政"]
hours = [12, 28, 18, 45, 8]
pairs = sorted(zip(hours, depts)) # 升序:最大值将落在 barh 顶部
sorted_hours = [p[0] for p in pairs]
sorted_depts = [p[1] for p in pairs]
colors = ["#c9cdd4"] * len(depts)
colors[-1] = "#e8734a" # 升序排完,最后一个就是最大值
fig, ax = plt.subplots(figsize=(6, 3))
ax.barh(sorted_depts, sorted_hours, color=colors)
ax.bar_label(ax.containers[0])
ax.set_title("客服月加班 45 小时,远超其他部门")
ax.set_xlabel("加班时长(小时)")
验收要点:排序方向对不对、强调色是否只有一个、标题是否带结论、有没有夹带私货库。AI 给的版本细节不同没关系——验收清单说了算,不是参考实现说了算。
📝 随堂测验
1. 向 AI 要图的“四要素”是?
2. AI 生成的代码里 df["sales"] 报了 KeyError,你的列实际叫 amount。根因是?
3. AI 给的代码 import seaborn 但你环境没装,最直接的处理是?
4. 验收 AI 代码的“查”这一步,对看不懂的行的规矩是?
5. “AI 时代不用学画图”这个说法,本课的回应是?
本课小结
- 四要素点菜法:数据长相、图型细节、装裱要求、技术约束——缺一样就等着返工
- 验收三步:跑(报错自己会读)→ 看(对照需求)→ 查(看不懂的行不放行)
- 三陷阱三药方:编列名→报数据长相;私引库→锁 matplotlib;过度装饰→点明配色
- 图是改出来的:迭代句式 + 报错原文直接贴回
下一课单元关卡:一张目标图摆在面前,用整单元的功夫把它像素级还原——外加综合测验。
划选正文任意文字可高亮、批注或加入复习卡
讨论
载入中…