显影· 三主题树 · 高中 术语表

把数据画成图:ECharts / matplotlib

把一组真数据画成会说话的图——顺便学会识破图表怎么撒谎。

⏱ 10–15 分钟讲 · 例 · 做 · 卡编号 hs-make-10
学习证据 学完后,怎么核对? 如何核对 · 适用边界 · 最后复核

把学习结果留在一个可以回看、可以复做的动作里;这一区只写学生能自己检查的证据。

如何核对

  • 可复现的数据或创意产物
  • 数据、参数与输出核对

适用边界

用于小规模教学数据与创意原型;结论受数据质量、参数、隐私和运行环境限制。

最后复核

这是内容复核日期,不是学习截止日期。

例子一点一分的差距,画成两倍的碾压

班会投影上一张柱状图:「B 班平均分远超 A 班」——一根柱子是另一根的两倍多高。小晴凑近看了眼坐标轴,笑了:A 班 89.1,B 班 90.2,差 1.1 分;柱子悬殊,是因为 y 轴不从 0 起,从 88 起。同一组数据、两种画法,下面当场重演——注意两张图的数字标签一模一样:

初中站回看:把数据画成图 —— 那时学的是「数字排成表是让人算的,画成图是让人一眼看懂的」;现在上真工具画真数据,还要补上另一半:一眼看懂的图,也能一眼骗人。

诚实版:y 轴从 0 起——1.1 分的差距,看起来就是 1.1 分。

截断版:同一组数据,y 轴从 88 起——差距被放大成「碾压」。两张图都随右上角主题变色,数字始终是 89.1 和 90.2:数字没撒谎,标尺在撒谎。

名词两件画图工具,按图住在哪里选:ECharts=网页里的图表库(vendored 单文件即可用,中文文档;上面两张图和本站的图表就是它画的);matplotlib=Python 世界的画图库,住在上一课的 Jupyter 里,算完一格顺手画一格。

定义画图三步:数据 → 选形状 → 定标尺

① 把数据准备成列表;② 形状由问题决定——先说清「我要读者比什么」,再挑图形;③ 诚实由标尺决定——y 轴从哪起、x 轴取哪段区间。前两步决定图说不说得清,第三步决定图说不说得对:

画图三步 数据 一列真数字 选形状 比较柱 · 趋势线 · 占比饼 定标尺 轴从哪起 · 区间多长 诚实与否,全在这一步 形状选错是说不清,标尺动手脚是说谎——看图先看轴

第三步最不起眼,却握着整张图的公信力。

你想让读者看什么用什么形状
比较几个量的大小柱状图
一个量随时间的走势折线图
部分占整体的比例饼图(超过五块就改用柱状)
两个量有没有关系散点图

看图先看轴——图表撒谎的两大惯用手法全在标尺上:① 截断坐标轴:y 轴不从 0 起,小差距画成大悬殊(上面第二张图);② 掐头去尾选区间:一条起起伏伏的曲线,只截取上涨的那一段,跌的月份不给你看。两招的共同点:数据全是真的,谎全在取景框上。

上手比想象容易。同一张诚实的柱状图,两个世界的写法——注意两段代码里都有那行「从 0 起」:

// 网页里:ECharts
var chart = echarts.init(document.getElementById('mychart'));
chart.setOption({
  xAxis: { type: 'category', data: ['A 班', 'B 班'] },
  yAxis: { type: 'value', min: 0 },        // 诚实的 y 轴,从 0 起
  series: [{ type: 'bar', data: [89.1, 90.2] }]
});
# Jupyter 里:matplotlib
import matplotlib.pyplot as plt
plt.bar(['A 班', 'B 班'], [89.1, 90.2])
plt.ylim(0, 100)   # 诚实的 y 轴,从 0 起
plt.show()

泛化换个角度:图是论证,轴是前提

一张图就是一段论证:数据是证据,形状是推理,标尺是前提——前提被动了手脚,证据再真、推理再顺,结论也不算数(1.2 的图尔敏在这里换了身衣服)。所以拿到任何图,三连问练成条件反射:轴从哪起?区间取多长?数据谁给的?这不只是防别人——下面例三你会看到,最容易被截断轴骗到的,常常是做图的人自己。

核心句:形状由问题决定:比较用柱、趋势用线、占比用饼;诚实由标尺决定——截断的坐标轴、掐头去尾的区间,能让同一组真数据讲出两个故事。看图先看轴。

补充三例——两个常见用法,一个易错。

例一 · 常见用法:给 studio 装第一张图

朵朵把上一课算出的「一周自习时长」搬进自己的页面,任务单交给编程智能体:「用 vendored 的 ECharts 画柱状图;约束:y 轴 min 写 0、颜色取页面 CSS 变量、数值标在柱顶;验收:换主题图跟着变色、本地 HTTP 预览可用、断网后不请求外部资源。」一稿过。2.2c 图解任务单怎么写,图表原样适用——图表也是图解,约束里多一条「标尺诚实」而已

例二 · 常见用法:识破掐头去尾

阿哲刷到一张「某学习法走红后,使用者成绩持续上涨」的折线图,x 轴只有 3 月到 5 月。他多问了一句「区间拉长呢」,翻出原始数据:这条线年年 3 到 5 月都涨——那是每学期的复习季,跟学习法没关系。区间换了,故事就换了:趋势结论要看整段曲线,不能只看别人裁给你的那一段——这正是三连问里「区间取多长」的用法。

例三 · 易错:自己成了撒谎的人

大鹏给班会做「同学日均手机使用」图:5.4 和 6.1 小时两根柱子,画出来「不够醒目」,他顺手把 y 轴改成从 5 起——全班哗然的效果有了,可数学课代表当场指出坐标轴动过手脚,后面连他的数据本身也没人信了。错在哪:他没打算骗人,只是想「效果好一点」——截断轴多数时候就是这么发生的。修法:默认从 0 起;差距真的小、又必须放大细看时,明确标注「y 轴从 5 起」并把数值标在柱顶——把取景框亮给读者,公信力才守得住。

新闻配图「本市空气质量大幅改善」,折线图只画了今年 2 月到 4 月,一路向好。你的第一反应该是?

数据与工具边界:只用自己的汇总或虚构数据,不把姓名、联系方式、同学记录或原始问卷上传给智能体或在线服务;先确认学校设备和账号规则。优先使用项目里已有的本地库,不能联网时用纸笔画两张同轴草图,也能完成“标尺诚实”的比较。
上机 · 一图两画
  1. 从上一课的笔记本里挑一组自己的汇总数据或虚构数据(或重新记一组,七个数以上),不带姓名、联系方式或他人记录。
  2. 诚实版:在 Jupyter 里用 matplotlib(或让智能体在你页面里用 ECharts)画出来——形状按「想让读者比什么」选,y 轴从 0 起、数值标上。
  3. 撒谎版:同一组数据故意画一张骗人的——截断 y 轴或只截一段区间,配一句你想诱导的结论。
  4. 两图并排,向同学说出撒谎版动了哪把标尺、观感差了多少;git 拍快照。

怎么算过关:两张图同数据不同观感;你能一句话说出谎点在哪根轴上;同学看完诚实版能准确复述真实差距。亲手造过一次假,以后一眼就能认出它。

复习卡 · 点一下翻面

图表撒谎的两大惯用手法是什么?拿到一张图,先问哪三连问?

答案

截断坐标轴(小差距画成大悬殊)、掐头去尾选区间(只给你看涨的那段)。三连问:轴从哪起?区间取多长?数据谁给的?——数字可以全真,谎藏在取景框里。

  • 形状由问题决定:比较柱、趋势线、占比饼、关系散点。
  • 诚实由标尺决定:看图先看轴——轴从哪起、区间多长。
  • 最容易被截断轴骗到的是做图的人自己——「想醒目一点」就是谎的起点。