零代码应用开发·第 15 章·3 学时

把结果变成一张图

一句结论,两张图,一行来源。单文件,双击就开,断网也能看。

本章精髓 同一份数据,画法不同,读出来的结论就不同。图不是给数据化妆,它替读图的人做了一次判断:哪个量重要、哪些拿来比、从哪儿开始看。选错图表类型、动一下坐标轴的起点,数字一个没改,结论就变了。

学完本章后,你应该能够:

  1. 说清柱状图、折线图与饼图各自适合回答什么问题,并为一份数据选出合适的图;
  2. 说清数值是怎么变成图上的长度与位置的,指出改动坐标轴起点会带来什么后果;
  3. 为一张图补齐标题、单位、数据范围与来源四项,并写出规模、分布、发现三句结论;
  4. 做出一个单文件的成果页,双击可看、断网可看,手机上也读得了;
  5. 先画出作品最后要给人看的那张图,再据此把期末选题砍到三个功能。
配套演示文件 第15章演示_成果页.html 第15章演示_抬基线.html 第15章演示_以终图定功能.html 第15章演示_汇总数据.csv 第15章演示_出图.py

一页成果,一组对照

成品 · 268 292 315 · 让它做减法

先看成品的版式,再看原料,最后看一眼画歪了会是什么样。

1.1本章成品:一页纸的成果

成品是一个 .html 文件,双击打开就是一页:最上面一句结论,中间两张图,最下面一行写清数据从哪来、什么时候统计的。不联网也能看,手机上也读得了,可以直接投影。

最上面
一句结论
整页字号最大的一行。读者只看这一行,也应当知道你想说什么。
标题写成"数据分析结果"
中间
两张图
一张比大小,一张看变化。每张各带标题、单位与数据范围。
四张图挤在一页,读者不知道看哪张
最下面
一行来源
数据从哪来、统计到什么时候、谁做的。这一行决定别人敢不敢引用。
只有图,没有出处

这一页的用途很具体:期末答辩时投影出来的第一屏。做完这一页,你也就想清楚了自己的作品最后要给人看什么。

1.2这份数据长什么样

原料是一张汇总表:三个班、六个月的读书活动参与人次。一行一个月,一列一个班。

月份数据2301数据2302数据2303
3月384552
4月424855
5月515358
6月475054
7月454951
8月454745
合计268292315
单位:人次。同一人多次参加计多次。

这张表里其实藏着两个可以说的事实:各班之间差多少(看最后一行),逐月怎么变化(看每一列的走势)。两件事需要两种图,这就是成果页上放两张图的原因。

1.3同一组数字,两张图

下面两张图用的是同一组数字:268、292、315。一个数都没改,只把纵轴的起点从 0 抬到了 250。

纵轴从 0 起 柱长与数值成正比读出来是"三个班差不多"
纵轴从 250 起 柱长只表示超出 250 的那部分读出来是"2303 遥遥领先"

柱子上标的数字完全相同,柱子的长度不同

两句话不可能都对。真实情况是:最低的班是最高的班的 85%;而在右边那张图上,最矮的柱子只有最高柱子的 28%。

图上看起来的差异,读者会当成数值差异。这一点不是修辞,是画图这件事的默认约定。

打开 第15章演示_抬基线.html,拖动那根滑块,看着柱子在你眼前变形。页面上还有一个"遮住数字"的开关,先遮住只看形状问一遍,再放开数字看一遍。

讨论右边那张图有没有说谎?它标注的数字是真的,纵轴的起点也写在轴上了。如果一份材料里只出现右边这张图,读者被误导的责任在谁?

1.4本章新技巧:让它帮你做减法

大模型的默认倾向是往上加。要一张图,它加渐变、阴影、圆角、入场动画;说想做个记账的,它能给你规划出会员体系和数据大屏。加出来的东西不一定难看,问题在于它们一样也不承载数据,却实实在在增加了读图和维护的成本。

所以本章两处都要用减法:一处砍图上的装饰,一处砍期末选题的功能。用法是同一个:让它扮演一个只做减法的角色,明确禁止它添加任何东西,并且要求它逐条说明"删掉之后读者会不会少知道一件事"。

删一样东西之前先问:它有没有承载数据。答不上来的,就是可以删的。

1.5可直接复制的提示词

发给 AI第一步 · 生成成果页
我要做一个单文件的成果展示页,答辩时投影用,手机上也要能打开。 数据如下(原样贴上,表头和每一行都在): [粘贴数据] 这一页要回答的问题是:[写你那一句结论] 要求: ① 合并成一个 .html 文件,双击就能打开; ② 不引用任何外部链接、字体或图表库,断网也要能正常显示; ③ 顶部一行结论,一句话写清,字号最大; ④ 中间两张图:一张柱状图比大小,一张折线图看变化; ⑤ 图用内联 SVG 画,不要用需要联网的图表库; ⑥ 柱状图的纵轴必须从 0 开始,不要为了让差距明显而截断; ⑦ 折线图的纵轴可以不从 0 起,但起点要标在轴上; ⑧ 每张图都要有标题、纵轴单位、数据的时间范围; ⑨ 底部一行写数据来源与统计日期; ⑩ 数据写在最上面的数组里,改数据不必改绘图代码; ⑪ 手机竖屏宽度下两张图自动竖排,图上的字号不小于 14 像素。 不要加渐变、阴影、三维效果、动画和背景图。
发给 AI第二步 · 砍掉图上的装饰
下面这个成果页我已经能打开了,现在请你只做减法。 逐条指出:页面上哪些元素不承载任何信息,可以直接删掉。 每条写明:删的是什么、删掉之后读者会不会少知道一件事。 【不要给我改好的版本】也不要建议我加任何东西, 包括配色方案、图标、动画、交互效果、补充说明文字。 最后告诉我:删完之后这一页还剩几个元素,其中哪一个是读者第一眼应该看到的。 [粘贴代码]
发给 AI第三步 · 砍期末选题的功能
下面是我的期末选题设想。 我的条件:只有两周,每周能投入约 6 小时,零基础,代码全部由 AI 生成, 我负责说需求和验收。 请你扮演一个严格的项目评审,只做减法,不要给我加任何功能: ① 指出这个题目里哪些部分两周内做不完,分别为什么; ② 帮我砍到三个核心功能,并说明砍掉的那些为什么可以先不要; ③ 给这三个功能各写两条验收标准, 格式是"在什么情况下,做什么操作,应该出现什么结果",不许出现形容词; ④ 按我的条件判断:这个题目该走网页路线还是 Python 路线,为什么; ⑤ 指出最可能卡住我的一个风险点,以及提前怎么防。 不要鼓励我。 选题设想:[写在这里]

第一段里的几条要求,分别对应后面要讲的知识点:

不引用任何外部链接、字体或图表库
断网时图表库加载不到,整张图变成空白,而且不报错
柱状图纵轴从 0 开始,不要为了让差距明显而截断
知识点 03:柱长就是数值,抬高起点等于把差距凭空放大
折线图纵轴可以不从 0 起,但起点要标在轴上
知识点 03:折线看的是走势,从 0 起反而挤成一条平线
每张图都要有标题、单位、时间范围,底部写来源
知识点 05:图被截出去转发时,四项是它身上仅剩的信息
数据写在最上面的数组里
知识点 02:数据与绘图分开,换一批数据不必碰绘图代码
图上的字号不小于 14 像素
知识点 08:字号要按最终的观看距离定,手机与后排都要读得了

1.6大模型的常见偏差

默认往图上加装饰。 渐变、阴影、三维、圆角、入场动画。这些一样也不增加信息,只增加读图成本,也让文件更容易出问题。"不要加渐变、阴影、三维效果、动画和背景图"这句要写全。

自动把纵轴调成好看的范围。 它会"优化"坐标范围让差距看起来更明显,出发点是让图更有冲击力,结果就是误导。柱状图从 0 起这一条必须写明,拿到代码后还要再核对一次。

引入需要联网的图表库。 这是本章最需要防的一种。用外部图表库做出来的页面在你机器上完全正常,拿到没网的场合就是一片空白,而且不报错,你在台上才发现。

Python 路线不处理中文。 它给的绘图代码默认不设中文字体,出来是一排方块。要在提示词里写明系统与可用的字体名,或者要求代码里自动从几个候选中挑一个可用的。

备用方案 现场生成不顺时,直接打开 第15章演示_成果页.html,它的数据区就在文件最上面,改几个数字两张图立刻跟着变。走 Python 路线的用 第15章演示_出图.py,把设置区的中文字体开关关掉再跑一次,可以当场看到方块。第15章演示_抬基线.html第15章演示_以终图定功能.html 是两个网页,不需要装任何东西。五个演示文件都不依赖网络。

图表类型、映射与基线 本章重点

比大小 · 看变化 · 映射 · 基线

本章的核心内容集中在这一部分和下一部分。

本章要学的术语 · 八个
01图表类型chart type
02映射mapping
03坐标轴与基线axis / baseline
04图表的适用边界chart limits
05图的说明要素title / unit / source
06配色与可读性contrast / legibility
07字体缺失missing glyph
08矢量图与位图SVG / PNG

这八个术语会原样出现在绘图库文档、报错提示与数据发布规范里。前四个在本部分讲解,后四个在第三部分讲解。

2.1四个知识点,一个一个看

01图表类型:先看要回答什么问题
要回答的问题
用哪一种
谁比谁多
柱状图
随时间怎么变
折线图
各占多少
饼图或横向条形

选哪一种由问题决定,不由好看决定

现象:同一份数据,有人画柱状图,有人画折线图,有人画饼图。

概念:图表类型不是审美选择,取决于这张图要回答的问题。比大小用柱状图,看随时间的变化用折线图,看占比用饼图或堆叠条形。选错的代价是读者读不出你想说的那件事,或者读出另一件。

类比:装水用杯子,装米用袋子。器具选错,东西不是撒了就是拿不动。

02映射:数字怎么变成一根柱子
数值
268
表里的一个数
映射
÷ 350 × 高
除以上限,乘以画布高
图形
一根柱子
长度就是那个数

代码里那一行除法,就是映射本身

现象:268 这个数字,在图上成了一根具体高度的柱子。

概念:画图的本质是映射(mapping):把数值换算成长度、位置或角度。柱状图用长度,折线图用位置的高低,饼图用角度。映射一旦定下来,图上每一处视觉差异都代表数值差异;反过来说,读者看到的视觉差异,会被他当成数值差异。

类比:温度计的刻度就是一次映射。水银柱多高对应多少度,是事先定死的。

03坐标轴与基线:两种图的规矩不一样
柱状图 柱长就是数值本身纵轴必须从 0 起
折线图 看的是走势可以不从 0 起,但起点要标出来

规矩不同,原因在于它们靠什么表示数值

现象:纵轴从 250 开始,三根柱子的差距看着大了三倍多。

概念:柱状图的纵轴必须从 0 起,因为柱子的长度就是数值本身;起点一抬,柱长表示的就变成了"超出起点的那一部分"。折线图看的是变化的走势,纵轴可以不从 0 起,否则数据挤成一条平线什么也看不出来,但起点必须清清楚楚标在轴上。这是两种图的根本差别,也是最常被用来误导的一处。

类比:从半山腰量身高,谁都显得矮,而且矮得不成比例。

04适用边界:饼图什么时候读不出来
饼图 三块差不多看不出谁多
横向条形 长度好比一眼看得出

比角度比不过比长度,这是人眼的限制

现象:三个班的饼图,三块看着差不多,读不出谁多。

概念:饼图靠角度表示占比,而人眼比较角度的能力远不如比较长度。类别超过五个,或者各类占比接近时,饼图就读不出差别,应当换成横向条形图。三维饼图与环形图在这个基础上更差:前排的扇形因为透视会显得比实际更大。

类比:五个人分蛋糕,看得出谁那块大;五十个人分,就只能看个热闹。

本章方法 先写出这张图要回答的那一句话,再决定画什么图。一句话写不出来,说明还没想清楚要给人看什么。

2.2数值是怎么变成一根柱子的

下面是成果页里数据区与柱状图部分的原文。整份文件里真正把数字变成图形的,就是中间那一行除法。

第15章演示_成果页.html节选 · 数据区与柱状图
/* ============ 数据区:改这里,两张图跟着变 ============ */
const DATA = [
  { 月份: '3月', 数据2301: 38, 数据2302: 45, 数据2303: 52 },
  // …中间四行省略…
  { 月份: '8月', 数据2301: 45, 数据2302: 47, 数据2303: 45 }
];

// 柱状图。纵轴一律从 0 起:柱子的长度就是数值本身
function drawBar(host, labels, values) {
  const W = host.clientWidth, H = 260;
  const pad = { t: 14, r: 10, b: 34, l: 40 };
  const iw = W - pad.l - pad.r, ih = H - pad.t - pad.b;
  const max = 350, step = 50;          // 轴上限与刻度间隔

  // 映射:数值 → 画布上的纵坐标
  const y = v => pad.t + ih - v / max * ih;

  // 网格线与刻度,从 0 画起
  for (let v = 0; v <= max; v += step) {
    svg.appendChild(el('line', { x1: pad.l, y1: y(v), x2: W - pad.r, y2: y(v),
      stroke: v === 0 ? INK : LINE, 'stroke-width': v === 0 ? 1.4 : 1 }));
  }

  // 每个数据画一根柱子
  labels.forEach((label, i) => {
    svg.appendChild(el('rect', { x: cx - bw / 2, y: y(values[i]),
      width: bw, height: ih - (y(values[i]) - pad.t), fill: GREEN }));
  });
}
const DATA = [ … ]
数据区,放在文件最上面。换一批数据只改这里,下面的绘图代码一个字不动。 数据散在绘图函数里时,换一份数据要翻遍整个文件,还容易漏改一处
const max = 350
纵轴上限,写死而不是取数据最大值。同一页上几张图刻度一致,才能直接对比。 按数据最大值自动算时,每张图的刻度都不一样,两张图之间没法比
const y = v => pad.t + ih - v / max * ih
这一行就是映射。数值除以上限得到比例,乘以画布高度得到长度,再从底部往上量。整份文件里最要紧的一行。 把它改成 (v - 250) / (max - 250),画出来的就是那张误导图
for (let v = 0; v <= max; …)
刻度从 0 开始循环,所以 0 那条基线一定画得出来。基线还特意加粗,与其余网格线区分。 从别的数开始时,读者根本看不到基线在哪,也就无从判断柱长代表什么
viewBox: `0 0 ${W} ${H}` W = host.clientWidth
让一个绘图单位等于一个屏幕像素。窗口一变就重画一次,因此手机上字号不会被缩小。 viewBox 写成固定值时,窄屏上整张图等比缩小,14 像素的字会变成 8 像素

2.3把基线抬高 250,发生了什么

回到 1.3 节那两张图。左右两边的差别只有一处:映射公式里的起点。

从 0 起v / 350
柱长与数值成正比。

268 画出来是 315 的 85%,与两个数字的真实关系一致。
从 250 起(v − 250) / 70
柱长表示的变成了"超出 250 的那一部分"。

268 只剩 18,315 剩 65,画出来是 28%,差距被放大了三倍多。
班级真实人次占最高的比例从 0 起的柱长从 250 起的柱长
数据230126885%85%28%
数据230229293%93%65%
数据2303315100%100%100%
柱长为实际测量值。纵轴从 0 起时,两列完全一致;抬到 250 之后,柱长不再代表数值。
这一处没有报错,也不违反任何规则。 数字标注是真的,纵轴起点也标在轴上了,挑不出硬伤。但读者读图先看形状,后看数字,很多人根本不会去核对刻度。所以判断一张图有没有问题,不能只问"标注对不对",还要问看一眼之后留在脑子里的印象对不对。折线图不从 0 起是正当做法,柱状图不从 0 起则几乎总是误导,区别就在于柱长本身承载了数值。
讨论如果一份汇报材料要突出"我们班进步很大",你会不会想用右边那张?想用的时候,是什么在拦着你?如果你的老师、同学都看不出来,那道拦着你的东西还在不在?

让一张图能被单独看懂 本章重点

四项说明 · 配色 · 字体 · 三句话结论

图一旦被截图转发,周围那些文字就跟不过去了。

3.1另外四个知识点

05说明要素:一张图要能单独看懂
要素
回答什么
① 标题
这张图说的是什么
② 单位
数字的量纲:人次、元、分
③ 数据范围
哪段时间、哪些对象
④ 来源
数据从哪来、何时统计

缺任何一样,图被单独截出去就会被误读

现象:图上只有柱子和数字,没写单位,也没写是哪段时间的数据。

概念:一张能独立看懂的图要有四样:标题、单位、数据范围、来源。理由很实际:图一旦被截图转发,周围那些文字就跟不过去了,读者手上只剩这张图。四项齐全,这张图才敢让别人引用。

类比:没有落款和日期的通知,没人敢照着执行。

06配色与可读性:颜色是用来区分的
只靠颜色区分有人分不出来
颜色加标签谁都读得了
浅色细线投影出来就没了

屏幕上好看与投影出来能看,是两件事

现象:投影出来之后,浅色的那条线在后排完全看不见。

概念:颜色在图上承担的是区分,不是装饰。两条要求:不要只靠颜色区分,同时加上标签或形状,因为红绿色觉障碍在男性中的比例约为百分之八;投影场景要保证足够的对比,浅灰浅黄这类在屏幕上好看的颜色,投出来往往就消失了。渐变、阴影、三维效果不承载任何信息,一律去掉。

类比:地铁线路图除了颜色还标线路号,色觉不同的人照样坐得了车。

07字体缺失:中文变成一排方块
终端里的提示报的是缺字,不是代码错
UserWarning: Glyph 25968 missing from font(s) DejaVu Sans.

Python 出图路线上第一个、也几乎必然会遇到的问题

现象:Python 出的图,中文标题全变成了方块。

概念:绘图库自带的默认字体不包含汉字,遇到汉字就画一个空方框,同时在终端里给出 Glyph missing 的提示。解决办法是在代码里显式指定一个系统里装着的中文字体。这与代码写得对不对没有关系。网页路线不会遇到,因为浏览器会自己找系统里的中文字体。

类比:一台没有中文字模的打字机。打英文没问题,打汉字就是一格空白。

08矢量图与位图:放大之后糊不糊
SVG 记录形状与坐标放多大都清晰
PNG 记录一格格像素放大就糊

投影用 PNG 时,导出分辨率不要低于 150 dpi

现象:同一张图放进文档很清楚,投到大屏上就糊了。

概念:矢量图(如 SVG)记录的是形状与坐标,放大多少倍都清晰,网页路线画出来的就是它;位图(如 PNG)记录的是一格格像素,放大就出现锯齿。另外,图上的字号要按最终的观看距离定,屏幕上刚合适的字号,投到教室后排常常就看不清了。

类比:名片上的字放到海报上就太小;照片放大到墙面那么大,就看得见马赛克。

3.2三句话结论:规模、分布、发现

图画完了,还差最后一步:用三句话把它说出来。三句话各回答一件事,顺序固定:

第一句
规模
一共多少。六个月共 875 人次,平均每月 146 人次。
"数据量比较大"
第二句
分布
各部分怎么分。三个班分别是 268、292、315,最低的是最高的 85%。
"各班分布比较均衡"
第三句
发现
最值得说的那一件。五月见顶之后连续三个月回落,八月三个班拉平到 45、47、45。
"数据显示大家都很积极"
检验办法只有一条:每说一句,用手指一下这句话是从哪张图、哪根柱子读出来的。指不出来源的结论是编的。右边那一列的三句话之所以不合格,正是因为它们指不出来源,也无法被人核对。

3.3前沿三分钟:图上的墨水该用在哪

每章固定栏目 · 一条与本章内容相关的行业动态

本章的减法不是审美偏好,它有个正式的名字。统计学者爱德华·塔夫特在一九八三年出版的《定量信息的视觉显示》中提出数据墨水比:一张图上用掉的墨水,应当尽可能多地用于表示数据本身,用于边框、底纹、装饰的越少越好。四十多年过去,这仍然是图表设计的基本准则。

准则的影响看得见。早期的图表软件默认给你加上立体边框、渐变背景、三维透视和阴影,那是当时的审美,也是软件展示自己能力的方式。这些年主流绘图库的默认样式越来越素:去掉多余的边框、把网格线调淡、默认不加阴影。变的不是审美潮流,是对"图是用来读的"这件事有了共识。

对本章的实际影响是:删东西时有一条可以说得出口的依据。不必和人争论好不好看,只需要问一句:这个元素承载了哪一部分数据。

讨论按数据墨水比的说法,网格线也不承载数据,是不是也该删掉?如果全删了,读者还怎么估读一根柱子对应多少?这条准则在哪里应当停下来?

完整演示与期末开题

先定结论 · 出图 · 砍装饰 · 以终图定功能

从一张汇总表,到一页可以直接投影的成果,再到一份砍干净的选题。

4.1演示步骤

1
先写出那一句结论,再动手
对着汇总表看,把最想让人知道的那件事写成一句话。写不出来就先别画图,画出来也不知道该看哪里
产出:一句话
2
按这句话选图表类型
句子里说"谁比谁多",用柱状图;说"怎么变的",用折线图。两件事都要说,就两张图
产出:两张图的分工
3
用第一段提示词生成成果页,断网打开一次
生成之后把网络断开再双击,确认图还在。这一步现在做只花十秒,答辩现场发现就来不及了
产出:第一版成果页
4
用第二段提示词砍装饰,对照删前删后
逐条看它列出来的,自己判断该不该删。判断依据只有一条:这个元素承载了哪一部分数据
产出:删减记录与第二版
5
打开抬基线的演示,先遮住数字只看形状
拖动滑块把起点从 0 抬到 250,问全班读出来的结论一样不一样,再放开数字看一遍。本章最值得停下来的一步
产出:一组对照与一次判断
6
补齐标题、单位、数据范围与来源,写出三句话结论
补完之后把图单独截出来,问自己:只看这张截图,还知道它在说什么吗。三句话各指一次来源
产出:四项齐全的图与三句结论
7
换窄窗口看一遍,再投影看一遍
把浏览器窗口拖窄到手机宽度,看两张图有没有竖排、字有没有变小。再投到大屏上,站到最后一排看一眼
产出:两种场合下的验证

4.2以终图定功能

成果页做完,期末选题就好定了。方法是把顺序倒过来:先画出作品最后要给人看的那张图,功能清单自然就收敛了。图上没有的东西,功能就不用做。

常见的做法
先列功能
列出八条,逐条砍,砍不下去
本章的做法
先画终图
图上要显示什么,功能就做什么

顺序不能反,砍的理由要看得见

为什么这样有效:对着一份功能清单砍需求,每一条看起来都有用,砍谁都心疼。而对着一张图砍,问题变成了一个事实判断:这个功能产出的数据,在图上占哪一块。占不到的,这次就不做。

打开 第15章演示_以终图定功能.html,先在终图上勾选你要显示的东西,页面会反过来算出你必须做哪几个功能,以及哪几个可以先不要。

八个功能各做三成,交出来是八个半成品;三个功能各做十成,交出来是一件可用的作品。砍需求不是妥协,是判断。

4.3开题卡:五项,缺一项不算开题

核心功能不超过三个 每一个都能在终图上指出对应的那一块 指不出来的功能,划掉,写进"这次不做"那一栏
验收标准不少于五条 格式是"在什么情况下,做什么操作,应该出现什么结果" 逐条读一遍,出现形容词的即为不合格
选定一条路线并写明理由 网页路线还是 Python 路线 理由要落在使用场景上,不能只写"我比较熟"
从答辩日往回排里程碑 至少留出三天缓冲 看最后一个里程碑与答辩日之间隔了几天
写下一条已识别的风险与应对 具体到某一步会卡住 "时间不够"不算,要写清哪一步、为什么、怎么提前防

上机实验

三选一 · 六步 · 先画图再定功能

上机环节由此开始,当堂完成并提交。

5.1三个题目,任选其一

题目 A
成果一页纸

把自己期末选题要展示的数据做成一页,一句结论加两张图。

通用
题目 B
一句话加一张图

从一份文字材料里把数字提出来,做成一张图和一句结论。

偏文科
题目 C
对照图

同一份数据画两张图,一张规范一张误导,写清读者会被带偏到哪里。

偏理工

三个题目都要求成果是单文件、双击可看、断网可看,并且四项说明要素齐全。数据可以自备,也可以用演示件里那份。允许更换题材。

5.2上机六步

前四步做成果页,后两步定期末选题。顺序不能反。

1
写出那一句结论,再选图表类型
一句话写在文档最上面。这一句写不出来就不要往下走,后面五步都建立在它上面
产出:一句结论与两张图的分工
2
用第一段提示词生成成果页,断网验证一次
断开网络双击打开,图还在才算过。检查页面里有没有 src、href、link 指向外部地址
产出:成果页与断网截图
3
用第二段提示词砍装饰,记录删了什么
每删一样写一句理由,理由只能是"它没有承载数据"。它列出来但你决定保留的,也要写明为什么保留
产出:删减记录
4
做一组坐标轴对照,写清读者会怎么被带偏
把柱状图的纵轴起点抬高,截两张图放在一起,用一句话写明两张图分别会让人得出什么结论
产出:两张对照图与一句判断
5
用第三段提示词砍期末选题,砍到三个核心功能
对照第 1 步那张图看它砍的对不对:图上要显示的东西,对应的功能不能砍;图上没有的,先不要。它砍掉的你不同意的,写明理由保留
产出:AI 砍需求的原始记录
6
填开题卡,倒排里程碑
五项齐全:功能不超过三个、验收标准不少于五条且不许出现形容词、选定路线并写明理由、从答辩日往回排并留出至少三天缓冲、一条风险与应对
产出:一张开题卡

5.3共同验收标准

单文件,断网可看 不依赖任何外部资源 断开网络双击打开,图仍然完整显示
顶部有一句结论 是整页字号最大的一行 只读这一行,能不能知道这页想说什么
柱状图纵轴从 0 起 刻度上能看到 0 这条基线 看图上最低的那条刻度线标的是不是 0
四项说明要素齐全 标题、单位、数据范围、来源 把图单独截出来,看还知不知道它在说什么
三句话结论各指得出来源 规模、分布、发现 每说一句,指一下是从哪张图哪根柱子读出来的
数据与绘图分开 数据集中写在一处 改一个数字,图跟着变,绘图代码一个字没动
窄屏可读 图竖排,字不缩小 把窗口拖到手机宽度,图上的字仍不小于 14 像素
开题卡五项齐全 功能、验收、路线、里程碑、风险 验收标准逐条读一遍,出现形容词的即为不合格

5.4常见错误与处理

双击打开是一片空白,什么图都没有
用了需要联网的图表库,当前没网
要求改成内联 SVG,页面里不出现指向外部地址的 src、href 与 link
图显示了,但数字对不上表
数据在生成时被它自己改过或者算错了合计
拿汇总表逐个核对数据区的数字,改数据区,不要改绘图代码
柱状图差距看着特别大
纵轴被自动截断了
找到映射那一行,把起点改回 0,刻度也从 0 开始画
折线图是一条几乎水平的直线
纵轴从 0 起,而数据都集中在很窄的一段
折线图把纵轴起点抬到数据下方一点,并把起点标在轴上
手机上看字特别小
SVG 整体被等比缩小,里面的字号跟着缩
让 viewBox 跟随容器宽度,窗口变化时重画一次
Python 出的图中文是方块
绘图库默认字体不含汉字
在代码里显式指定一个系统里装着的中文字体,并关掉负号的特殊处理
图放进文档很清楚,投影就糊
PNG 导出时分辨率太低
导出时把 dpi 提到 150 以上;或者改用 SVG,放大不糊
投影后浅色的线看不见
屏幕上好看的浅色,投出来对比不够
换成深色,并给每条线加上标签,不要只靠颜色区分

5.5提交内容

成果页
单个 .html 文件,断网可看
一个文件
坐标轴对照
两张图加一句话,写明读者会被带偏到哪里
两张截图加一段文字
删减记录与三句话结论
删了什么、为什么删、保留了什么、为什么保留;规模分布发现各一句
两段文字
开题卡
功能、验收标准、路线、里程碑、风险,附 AI 砍需求原始记录
一张表加一段记录

提交方式:按教师提供的作业模板填写,文档开头注明所选题目。提交渠道见课堂通知,当堂提交。

5.6再进一步(选做)

给成果页加一个切换:同一份数据,一个按钮在"从 0 起"和"从 250 起"之间切换,让看的人自己点一下,亲眼看着柱子变形。

做完会碰到一个需要判断的问题:这个功能到底该不该放进正式的成果页。它把误导的手法展示了出来,对读者是提醒;但它也让页面多了一个与数据无关的交互,按本章的减法准则,第一个该删的就是它。同一个元素,在教学材料里该留,在汇报材料里该删,取决于这一页是给谁看的。

本章小结

本章五条结论

  1. 先写出这张图要回答的那一句话,再决定画什么图。比大小用柱状,看变化用折线,看占比用饼图或条形。
  2. 柱状图的纵轴必须从 0 起。柱长就是数值,抬高起点等于凭空放大差距,而且挑不出硬伤。折线图可以不从 0 起,但起点要标在轴上。
  3. 一张图要能被单独看懂:标题、单位、数据范围、来源,四项缺一样,图被转发出去就会被误读。
  4. 三句话结论:规模、分布、发现。每说一句,指一下是从哪根柱子读出来的。指不出来源的结论是编的。
  5. 删一样东西之前先问它承载了哪一部分数据。答不上来的就是可以删的。这把刀同时用在图上的装饰和期末选题的功能上。
本章脉络