20 常用图形绘制
20.1 引言选择合适的图表
不同数据类型需要不同的图表:
- 时间序列: 折线图
- 分类比较: 柱状图、条形图
- 相关性: 散点图
- 占比: 饼图
- 分布: 直方图、密度图
20.2 本章学习目标
通过本章学习,你将能够:
- 按数据类型(时间序列、分类比较、相关性、占比、分布)选择合适的图表,并为选定的图表说明理由
- 用
plt.bar绘制柱状图、plt.barh绘制条形图,并说出两者参数顺序与适用场景的差异 - 为图形补齐”可读性要素”:坐标轴标签、刻度范围(
ylim)、中文刻度标签(xticks)、标题与柱顶数值标注(plt.text) - 解释非零起点坐标轴(
ylim([40000,150000]))对视觉比较的影响,判断何时该用、何时误用 - 在 1×2 子图布局中并列展示纵向柱状图与横向条形图,并了解双轴图(
twinx)的用途与风险
先修:章节 18、章节 10(第18章 Matplotlib 基础与第10章 Pandas 数据框:本章在画布/坐标轴与中文显示配置的基础上展开,并使用 DataFrame 组织作图数据)
20.3 中国GDP省份排名TOP5
任务要求(归纳自块内任务注释与代码):设置 SimHei 中文字体;构建 2022 年 GDP 前五省份的数据列表(广东 129118.6、江苏 122875.6、山东 87435.1、浙江 77715.4、河南 61345.1,单位亿元);绘制居中对齐、钢蓝色、透明度 0.6 的柱状图;添加 y 轴标签 "GDP:亿元人民币"、把 y 轴刻度范围设为 [40000,150000]、用中文省份名设置 x 轴刻度标签、添加标题 "2022年中国GDP排名前5的省份";用循环为每根柱子顶部添加数值标注;将图形保存为 1.png 并显示。请将代码原样输入教学平台(注释除外),判定以平台为准。
平台任务(平台原始代码)
以下代码与教学平台任务要求完全一致:
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
# 导入模块
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用黑体显示中文
# 构建数据
GDP = [129118.6,122875.6,87435.1,77715.4,61345.1]
# 绘图
plt.bar(range(5),GDP,align = "center",color = "steelblue",alpha = 0.6)
# 添加y轴标签
plt.ylabel("GDP:亿元人民币")
# 设置Y轴的刻度范围
plt.ylim([40000,150000])
# 添加x轴刻度标签
plt.xticks(range(5),['广东省','江苏省','山东省','浙江省','河南省'])
# 添加标题
plt.title('2022年中国GDP排名前5的省份')
# 为每个条形图添加数值标签
for x,y in enumerate(GDP):
plt.text(x,y+300,s=y,ha='center') # 添加文本标注
# 保存图形
plt.savefig("1.png")
plt.show() # 显示图形预期输出(本机 Python 实际运行结果,具体以平台运行结果为准):控制台无输出;生成文件 1.png,为一张 5 根柱子的柱状图——从左至右依次为广东 129118.6、江苏 122875.6、山东 87435.1、浙江 77715.4、河南 61345.1(亿元),每根柱顶上方标注未加千分位分隔的原值,y 轴从 40000 起而非 0(非零基线,柱子下段被截去,省际差距在视觉上被放大)。本机实跑验证:代码正常执行并生成图形;因本机未安装 SimHei 字体,图上中文显示为方框并伴随 findfont 警告(环境问题而非代码错误,教学平台已配置中文字体,以平台渲染为准)。
# =============================================================================
# 题目:中国GDP排名TOP5省份的双向对比可视化
# =============================================================================
# 本代码使用真实数据(2022年各省份GDP)创建柱状图和条形图,展示中国经济
# 规模最大的五个省份。通过纵向和横向两种可视化方式,帮助理解数据的
# 排名和相对差距。柱状图强调数值高度,条形图便于阅读长标签。
# ==================== 导入必要的库 ====================
import matplotlib.pyplot as plt # 导入Matplotlib库,用于绘制图表
import pandas as pd # 导入Pandas库,用于数据处理和存储
# ==================== 准备GDP数据 ====================
# 定义包含2022年GDP数据(单位:亿元)的字典
data = {
'省份': ['广东', '江苏', '山东', '浙江', '河南'], # GDP排名前五的省份名称
'GDP': [129118, 122875, 87435, 77715, 61345] # 对应的GDP数值(单位:亿元人民币)
}
# 将字典转换为DataFrame,便于数据处理和可视化
df = pd.DataFrame(data) # DataFrame是二维表格结构,包含省份和GDP两列
# ==================== 设置中文字体 ====================
# 配置Matplotlib以正确显示中文字符
plt.rcParams['font.sans-serif'] = ['Source Han Serif SC', 'SimHei'] # 规范字体在前,SimHei 仅作后备 # 设置字体为黑体(SimHei),支持中文显示
# SimHei是Windows系统自带的中文字体,也可使用'Microsoft YaHei'(微软雅黑)
# 解决负号显示问题(默认负号显示为方块,需要特殊配置)
plt.rcParams['axes.unicode_minus'] = False # 将负号显示为正常的减号,而非Unicode字符
# ==================== 创建1x2的子图布局 ====================
# 创建一个包含1行2列共2个子图的画布,总尺寸为14x6英寸
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
# figsize参数的第一个值是宽度,第二个值是高度,单位为英寸
# axes是一个包含2个子图对象的列表,可通过axes[0]和axes[1]访问
# ==================== 子图1:纵向柱状图 ====================
# 绘制纵向柱状图,柱子高度对应GDP值
axes[0].bar(df['省份'], df['GDP'], color='steelblue', edgecolor='black')
# 第一个参数是x轴数据(省份名称)
# 第二个参数是y轴数据(GDP数值)
# color参数设置柱子填充色为钢蓝色
# edgecolor参数设置柱子边框为黑色,增强视觉边界
# 设置子图1的标题,字体大小14
axes[0].set_title('中国GDP排名TOP5(柱状图)', fontsize=14)
# 设置x轴标签,字体大小12
axes[0].set_xlabel('省份', fontsize=12)
# 设置y轴标签,说明单位
axes[0].set_ylabel('GDP(亿元)', fontsize=12)
# 添加水平网格线,仅沿y轴方向,透明度为0.3
axes[0].grid(axis='y', alpha=0.3) # axis='y'表示仅显示y轴方向的网格线
# ==================== 添加数值标签(柱状图) ====================
# 在每个柱子上方显示具体的GDP数值
for i, v in enumerate(df['GDP']): # 遍历GDP数据,i是索引(0-4),v是GDP数值
# 在柱子顶部添加文本标签
axes[0].text(i, v + 2000, f'{v:,}', ha='center', fontsize=10)
# i是x坐标(柱子的水平位置)
# v + 2000是y坐标(柱子顶部上方2000单位处,避免文字与柱子重叠)
# f'{v:,}'是格式化字符串,逗号作为千位分隔符(如"129,118")
# ha='center'表示水平居中对齐
# fontsize=10设置字体大小
# ==================== 子图2:横向条形图 ====================
# 绘制横向条形图,条形长度对应GDP值
axes[1].barh(df['省份'], df['GDP'], color='coral', edgecolor='black')
# barh是horizontal bar的缩写,绘制横向条形图
# 第一个参数是y轴数据(省份名称)
# 第二个参数是x轴数据(GDP数值)
# color参数设置条形填充色为珊瑚色
# edgecolor参数设置条形边框为黑色
# 设置子图2的标题
axes[1].set_title('中国GDP排名TOP5(条形图)', fontsize=14)
# 设置x轴标签(条形图的横轴是数值)
axes[1].set_xlabel('GDP(亿元)', fontsize=12)
# 添加垂直网格线,仅沿x轴方向,透明度为0.3
axes[1].grid(axis='x', alpha=0.3) # axis='x'表示仅显示x轴方向的网格线
# ==================== 添加数值标签(条形图) ====================
# 在每个条形右侧显示具体的GDP数值
for i, v in enumerate(df['GDP']): # 遍历GDP数据
# 在条形右端添加文本标签
axes[1].text(v + 2000, i, f'{v:,}', va='center', fontsize=10)
# v + 2000是x坐标(条形右端右侧2000单位处)
# i是y坐标(条形的垂直位置)
# va='center'表示垂直居中对齐
# f'{v:,}'格式化数值,添加千位分隔符
# ==================== 调整布局并显示图表 ====================
# tight_layout()自动调整子图间距,防止标签和标题重叠
plt.tight_layout() # 优化布局,确保所有元素清晰可见
# 显示完整的图表
plt.show() # 将两个子图作为一个整体展示
# ==================== 计算和输出统计信息 ====================
# 计算五省GDP总和
total_gdp = df['GDP'].sum() # sum()方法计算Series所有元素的总和
# 计算各省GDP占五省总和的百分比
gdp_share = df['GDP'] / total_gdp * 100 # 逐元素除法,返回百分比Series
# 打印格式化的详细数据
print("\n详细数据:")
for _, row in df.iterrows(): # 遍历DataFrame的每一行
# _是索引(本例中不需要使用),row是一个Series,包含该行的所有列
print(f"{row['省份']}: {row['GDP']:,}亿元")
# row['省份']访问省份列
# row['GDP']访问GDP列,格式化为带千位分隔符的数值
# 打印五省GDP总计
print(f"\n五省GDP总计: {total_gdp:,}亿元")
# 计算占全国GDP的比例(假设全国为100万亿元)
print(f"\n占全国GDP比例(假设全国为100万亿): {total_gdp/1000000:.1%}")
# 100万亿 = 1000000亿元
# .1%表示格式化为百分比,保留1位小数
# 输出解读:
# 图表显示广东省GDP最高(12.9万亿),江苏省紧随其后(12.3万亿),两省经济规模接近
# 山东第三(8.7万亿),与第一梯队有较大差距
# 浙江和河南分别位列第四和第五
# 五省GDP总计约47.8万亿,占全国约四成(按代码假设的100万亿分母计算为47.8%),体现了经济集中的现象
# 柱状图便于比较高度差异,条形图便于阅读省份名称20.4 图表选择指南
| 数据类型 | 推荐图表 | 说明 |
|---|---|---|
| 时间序列 | 折线图 | 展示趋势 |
| 分类比较 | 柱状图/条形图 | 比较大小 |
| 相关性 | 散点图 | 观察关系 |
| 占比 | 饼图 | 显示份额 |
| 分布 | 直方图/箱线图 | 显示分布 |
20.5 高级技巧
# =============================================================================
# 题目:双轴图(双y轴)的高级可视化技术
# =============================================================================
# 本代码演示如何创建双轴图表,即在同一个x轴上展示两个不同量纲或数量级
# 的变量。这在金融数据分析中非常常见,例如同时展示股票收益率和成交量。
# 左y轴显示收益率(百分比),右y轴显示成交量(股数),便于观察二者的关系。
# ==================== 导入必要的库 ====================
import matplotlib.pyplot as plt # 导入Matplotlib库,用于绘图
import numpy as np # 导入NumPy库,用于生成模拟数据
# ==================== 创建复杂图表布局 ====================
# 创建一个空白画布,不创建子图
fig = plt.figure(figsize=(12, 8)) # 画布尺寸为12x8英寸
# 使用GridSpec创建复杂的网格布局(2行2列)
gs = fig.add_gridspec(2, 2, hspace=0.3, wspace=0.3)
# hspace控制子图之间的垂直间距(占子图高度的比例)
# wspace控制子图之间的水平间距(占子图宽度的比例)
# 0.3表示间距为子图大小的30%
# ==================== 子图1:双轴图 ====================
# 在网格的第一行添加一个跨两列的子图
ax1 = fig.add_subplot(gs[0, :]) # gs[0, :]表示第0行,所有列(跨两列)
# ==================== 生成模拟数据 ====================
# 设置随机种子,确保每次运行结果相同
np.random.seed(42)
# 创建x轴数据(0-9的整数序列)
x = np.arange(10) # 生成[0, 1, 2, ..., 9],代表时间点
# 生成y1数据(收益率):随机数的累积和
y1 = np.random.randn(10).cumsum() # randn生成10个标准正态分布随机数,cumsum计算累积和
# 模拟收益率随时间的变化,可能为正也可能为负
# 生成y2数据(成交量):随机数的累积和乘以100
y2 = np.random.randn(10).cumsum() * 100
# 乘以100使成交量的数量级远大于收益率,适合双轴展示
# ==================== 绘制第一条曲线(左y轴) ====================
# 在ax1上绘制收益率曲线
ax1.plot(x, y1, 'b-', label='收益率', linewidth=2)
# 'b-'表示蓝色实线(b=blue, -=实线)
# label参数设置图例文本
# linewidth=2设置线宽为2个像素
# 设置左y轴标签(收益率)
ax1.set_xlabel('时间', fontsize=12) # 设置x轴标签,字体大小12
ax1.set_ylabel('收益率', fontsize=12, color='b') # 设置左y轴标签,颜色为蓝色
# color='b'使标签颜色与曲线颜色一致,增强视觉关联
# 设置左y轴刻度标签的颜色
ax1.tick_params(axis='y', labelcolor='b') # 将左y轴的刻度数字设为蓝色
# 在左上角添加图例
ax1.legend(loc='upper left') # loc='upper left'指定图例位置在左上角
# ==================== 创建并绘制第二条曲线(右y轴) ====================
# 创建与ax1共享x轴的新y轴
ax2 = ax1.twinx() # twinx()创建一个与ax1共享x轴的新坐标系,但有独立的y轴
# 这样可以在同一图表上绘制两条不同量纲的曲线
# 在ax2上绘制成交量曲线
ax2.plot(x, y2, 'r-', label='成交量', linewidth=2)
# 'r-'表示红色实线(r=red)
# 这条曲线使用右侧的y轴刻度
# 设置右y轴标签(成交量)
ax2.set_ylabel('成交量', fontsize=12, color='r') # 标签颜色为红色
# 右y轴的刻度范围自动根据y2数据调整
# 设置右y轴刻度标签的颜色
ax2.tick_params(axis='y', labelcolor='r') # 将右y轴的刻度数字设为红色
# 在右上角添加图例
ax2.legend(loc='upper right') # loc='upper right'指定图例位置在右上角
# ==================== 设置总标题 ====================
# 为整个双轴图设置标题
ax1.set_title('双轴图:收益率与成交量', fontsize=14) # 标题字体大小14
# 虽然ax1和ax2是两个坐标系,但它们共享画布,任一坐标系设置标题即可
# ==================== 显示图表 ====================
plt.show() # 展示完整的双轴图
# 输出解读:
# 双轴图是金融分析的利器,可以同时观察两个相关但量纲不同的变量
# 例如:股票价格(左轴)和成交量(右轴)、利率(左轴)和通胀率(右轴)
# 左侧的蓝色曲线表示收益率的变化趋势,右侧的红色曲线表示成交量的变化
# 通过双轴图,可以观察两个变量是否存在相关关系(如成交量是否随收益率增加)
# 注意:双轴图可能产生视觉误导,需谨慎使用,确保两个变量确实相关且值得同时展示20.6 本章小结
要点:
- 图表选型跟着数据类型走:时间序列用折线图、分类比较用柱状图/条形图、相关性用散点图、占比用饼图、分布用直方图/箱线图
plt.bar(x, height)与plt.barh(y, width)参数顺序相反:柱状图先给 x 位置再给高度,条形图先给 y 位置再给长度;省份名等长标签用横向条形图更易读- 数值标注
plt.text(x, y, s, ha=...)需要自己计算摆放坐标,通常在数值上加一个偏移量(如y+300)避免与柱顶重叠;ha='center'水平居中、va='center'垂直居中 ylim/xticks直接控制读者看到的”取景框”:非零起点放大差异、排序决定阅读顺序,两者都是表达手段,也是误导来源- 多子图用
plt.subplots(1, 2)返回的坐标轴数组逐个绘制;两个量纲不同的序列共享同一个 x 轴时用twinx()双轴,但要配色区分并谨慎解读
易错点:
- 本机没有
SimHei时中文显示为方框并伴随findfont警告,是环境问题而非代码错误;平台已配置中文字体,以平台渲染为准 xticks提供的标签数量必须与刻度位置数量一致,否则报ValueError- 数值标注的偏移量(
y+300)是绝对量,数据量级变化后需同步调整,否则标注会与柱顶重叠或飞出图外 - 非零基线的柱状图会让”广东约为河南两倍”看起来差距更大,汇报场景要么从 0 画起、要么明确标注坐标起点
barh之后网格方向要跟着改成axis='x',沿用axis='y'会出现无效网格- 双轴图两条曲线共用 x 轴但左右刻度独立,视觉上的”同步波动”可能只是刻度安排造成的假象
20.7 动手与思考
以下练习每题附参考答案(默认折叠)。请先独立完成并写下你的判断,再点开对照,最后上机验证。
输出预测:不运行代码,先写出下面代码的输出结果,再上机检验你的判断。
GDP = [129118.6, 122875.6, 87435.1, 77715.4, 61345.1] print(round(GDP[0] / GDP[-1], 2)) print(sum(g > 100000 for g in GDP))参考答案(先写下你的预测再点开)
解题思路:逐行推演。
GDP[0]是 129118.6(广东),GDP[-1]是 61345.1(河南,列表最后一个元素),相除约 2.105,round(..., 2)保留两位小数得2.1——广东 GDP 约为河南的 2.1 倍。第 2 个print中,生成器g > 100000对每个元素给出布尔值,True参与求和按 1 计:大于 10 万亿元的只有广东与江苏两个,故输出2。# 验证脚本:逐行输出两个表达式的求值结果 GDP = [129118.6, 122875.6, 87435.1, 77715.4, 61345.1] # 2022年GDP前五省份(亿元) print(round(GDP[0] / GDP[-1], 2)) # 首位与末位之比,保留两位小数 print(sum(g > 100000 for g in GDP)) # 超过10万亿元的省份个数预期输出(本机 peter 环境实际运行结果,具体以平台运行结果为准):
2.1 2回扣本章:对应本章小结“易错点”第 4 条——“广东约为河南两倍”这一数值判断正是第 4 题讨论非零基线视觉误导的依据。
概念辨析:
plt.bar与plt.barh的参数含义与适用场景有何差异?中文省份名这类较长的类别标签,为什么更适合横向条形图?参考答案(点开前请先独立完成)
解题思路:逐点作答。第一,参数含义与顺序:
plt.bar(x, height)画纵向柱状图,x是类别位置、height是柱高,类别名标在横轴上;plt.barh(y, width)画横向条形图,y是类别位置、width是条形长度,类别名标在纵轴上。两者都是“位置在前、数值在后”,但轴向相反:bar沿 y 轴比较高度,barh沿 x 轴比较长度。第二,适用场景:纵向柱状图适合类别名短、类别数适中的比较,横向条形图适合类别名长或类别数多的场合,也天然契合“自上而下的排行榜”式阅读。第三,中文省份名(如“黑龙江省”这类三四个字的标签)在纵向柱状图的 x 轴上要么水平排开挤占宽度、要么被迫旋转 45° 倾斜阅读;横向条形图把类别名放在 y 轴,每个标签独占一行、从左到右水平阅读,长标签不再互相拥挤,因此更适合。回扣本章:对应本章小结“要点”第 2 条——
plt.bar与plt.barh参数顺序相反,省份名等长标签用横向条形图更易读。变式任务(平台任务同型改造):把平台任务的柱状图改为按 GDP 升序排列的横向条形图——y 轴刻度标签用中文省份名,数值标注放在每根条形右端(注意
va='center'与偏移方向),并保留非零起点 x 轴。对比升序、降序、平台原始顺序三种排列,哪一种最利于快速找出第一名?参考答案(点开前请先独立完成)
解题思路:改造要点有四处——用
np.argsort得到 GDP 升序的索引,据此重排省份名与数值列表;plt.bar换成plt.barh;数值标注的坐标从“柱顶上方”改为“条形右端”(x 坐标在数值上加正偏移,va='center'垂直居中);数值轴随轴向翻转,平台的plt.ylim([40000, 150000])相应改为ax.set_xlim([40000, 150000]),网格方向跟着改为axis='x'。三种排列的对比:barh的 y 轴自下而上排列,升序数组恰好把最大值(广东)放到最顶端,整幅图呈“排行榜第一名在最上面”的形态,视线落在图顶部即可锁定第一名,最利于快速找出第一名;而平台原始顺序本身就是按 GDP 降序排列的数组,直接喂给barh会把广东压到最下方,显式降序排列与之效果相同,都需要视线扫到图底才能找到第一名。结论:升序最优(注意这是barh的方向特性,纵向柱状图的结论恰好相反)。# 变式程序:按GDP升序排列的横向条形图(保留非零起点x轴) import numpy as np # 导入NumPy用于升序排序 import matplotlib.pyplot as plt # 导入Matplotlib绘图库 province_names = ['广东省', '江苏省', '山东省', '浙江省', '河南省'] # 平台原始顺序(降序) gdp_values = [129118.6, 122875.6, 87435.1, 77715.4, 61345.1] # 对应GDP(亿元) ascending_index = np.argsort(gdp_values) # GDP升序排列的省份索引 province_ascending = [province_names[i] for i in ascending_index] # 升序省份名列表 gdp_ascending = [gdp_values[i] for i in ascending_index] # 升序GDP列表 plt.rcParams['font.sans-serif'] = ['Source Han Serif SC', 'SimHei'] # 中文字体 plt.rcParams['axes.unicode_minus'] = False # 负号正常显示 fig, ax = plt.subplots(figsize=(8, 5)) # 创建画布与坐标轴 ax.barh(province_ascending, gdp_ascending, color='steelblue', alpha=0.6) # 升序横向条形图 ax.set_xlim([40000, 150000]) # 保留非零起点x轴 ax.set_xlabel('GDP:亿元人民币') # x轴标签(数值轴) ax.set_title('2022年中国GDP排名前5的省份(升序条形图)') # 标题 for y_position, gdp_value in enumerate(gdp_ascending): # 遍历每根条形 ax.text(gdp_value + 300, y_position, s=gdp_value, va='center') # 数值标注放条形右端,垂直居中 ax.grid(axis='x', alpha=0.3) # 条形图网格应沿x轴方向 plt.tight_layout() # 自动调整布局 plt.savefig('ch20_q3.png') # 保存图形(也可用plt.show()显示) print('升序排列(自下而上):', province_ascending) # 输出升序省份顺序 print('升序排列对应GDP:', gdp_ascending) # 输出对应数值预期输出(本机 peter 环境实际运行结果,图形在线版不执行、以教学平台渲染为准):
升序排列(自下而上): ['河南省', '浙江省', '山东省', '江苏省', '广东省'] 升序排列对应GDP: [61345.1, 77715.4, 87435.1, 122875.6, 129118.6]图形判读:5 根蓝色半透明条形自下而上按河南至广东升序排列,最长的条形(广东)位于最顶端,条形右端标注原始数值,x 轴自 40000 起(非零基线,条形左段被截去);本机未安装列表中的中文字体时,图上中文显示为方框并伴随
findfont警告,属环境问题,以平台渲染为准。注意:以上为本题变式的独立代码;列表 20.1 对应平台任务的原始代码块仍须原样输入教学平台,不要用本变式替换。
回扣本章:对应本章小结“要点”第 2、3、4 条(
barh的参数与适用场景、plt.text的va='center'与偏移量、xlim非零起点的取景框作用)与“易错点”第 3、6 条(偏移量是绝对量需随量级调整;barh之后网格方向要改成axis='x')。思考题:平台代码把
ylim下限设为 40000 而不是 0。这个选择让五省的差距看起来如何变化?如果这张图出现在新闻报道里,你会向作者提出什么问题?参考答案(点开前请先独立完成)
解题思路:非零基线改变了柱长的比例基准。柱子只画出“数值减去 40000”的那一段:广东与河南的实际 GDP 之比约为 2.1 倍,但柱长之比为 (129118.6−40000)/(61345.1−40000)≈4.2 倍——省际差距在视觉上被放大约一倍;江苏与广东本已接近(实际之比约 0.95),截断后柱长之比降到约 0.93,头部之间的细小差距同样被放大。因此这张图会让读者觉得五省差距悬殊、头部咬得很紧。若它出现在新闻报道里,可以向作者提出的问题包括:坐标轴为何从 40000 而不是 0 开始?截断起点在图上或图注中是否有明确标注?改回 0 基线后“广东约为河南两倍”的结论是否仍然成立?若作者的意图是强调头部差距,也应在图注中说明基线并给出真实比值,让读者能还原原始数量关系。非零基线并非绝对禁区——差异很小时截断能凸显变化——但用于“比大小”的柱状图默认应从 0 画起,否则柱长与数值成正比的默认预期被打破。
回扣本章:对应本章小结“要点”第 4 条(
ylim直接控制读者看到的“取景框”,既是表达手段也是误导来源)与“易错点”第 4 条(非零基线让“广东约为河南两倍”看起来差距更大,汇报场景要么从 0 画起、要么明确标注坐标起点)。