图表选择可视化指南:柱状图:比大小与构成(深度版)
比较不同类别的数值大小,或展示构成比例(堆叠/百分比)。类别少而清晰时首选。
分类:📈 基础图 适用:各方案得分对比、各地区数量、构成占比
一、这个图适合谁(适用场景)
- 各方案得分对比
- 各地区数量
- 构成占比
二、图表结构要素
- 横轴=类别(离散)
- 纵轴=数值
- 可分组/堆叠
- 排序更易读
三、可视化的底层逻辑
柱状图用的是"长度/高度"通道(感知精度第二档,仅次于位置),正好适合离散类别的大小比较——人对"哪根柱子更长"的判断又快又准。但它有一个致命前提:纵轴必须从 0 开始。因为长度比较依赖"从同一基线出发的绝对长度",一旦截断基线,视觉长度差被人为放大,真实比值与视觉比值脱节,这是柱状图最常见的误导性丑图。另一条经验:类别数遵循 Miller 的"7±2"短时记忆上限,超过约 10 类人类就难以同时比较,应聚合或改用横向条形图。核心思想:用高精度长度通道做精确比较,且绝不破坏基线。
四、视觉编码与感知推导
基线截断失真:显示长度 ,其中 为纵轴起点偏移(正常 )。真实比值 与视觉比值
越接近 0 失真越小。故"纵轴从 0"不是在美学,而是在保证视觉比=真实比。
排序降低搜索成本:类别按值降序排列后,最大值在视觉 定位;未排序则需通读全部 根柱子,搜索成本 。当 大时排序的收益线性放大。
类别可辨上限:人可同时比较的离散类别数约 (Miller 定律)。 时建议先聚合(如按区域合并)或转横向条形图(利用更长横向空间);否则读者无法在单图内完成全比较。
五、怎么画(步骤)
- 类别≤10 用柱状;太多改用条形图(横向)或先聚合。
- 要比较构成 → 堆叠柱状或 100% 堆叠。
- 按数值排序让高低一目了然。
- 纵轴从 0 开始,避免夸大差异。
- 加数据标签,省去读者猜高度。
六、何时用 / 何时不用 / 常见丑图
- 何时用:类别间『谁大谁小』『占比多少』。
- 何时不用:连续趋势 → 折线;关系 → 散点。
- 常见丑图:纵轴不从0、3D 柱状扭曲、类别过多拥挤。
七、常见坑
- 纵轴截断夸大差异
- 3D 柱状图失真
- 类别过多看不清
八、画图自检清单
- 类别数合适或已聚合
- 纵轴从0
- 已排序/加标签
- 构成用堆叠清晰
九、配套资源与搭配
- 评价类问题怎么选方法
- 论文图表规范与排版
- 图表选择可视化指南
本指南由 MCM520 资料站自动生成(深度版),配套论文图表规范与可视化模板可在资源页下载。
十、实战案例——Python 绘制 + 图效果
假设你正在做一道数学建模题,需要从 5 个备选方案中选出最优。
你已用 AHP-熵权法算出各方案的综合得分,最直观的展示方式就是柱状图。
案例场景:某物流选址问题,方案 A-E 的综合评分如下:
方案 A:86.4 | 方案 B:92.1 | 方案 C:78.6 | 方案 D:88.9 | 方案 E:95.2
用柱状图展示时,记得:按得分降序排列、纵轴从 0 开始、加数据标签。
完整代码(Python + matplotlib)
import matplotlib.pyplot as plt
labels = ['方案E', '方案B', '方案D', '方案A', '方案C']
scores = [95.2, 92.1, 88.9, 86.4, 78.6]
colors = ['#dc2626', '#2563eb', '#7c3aed', '#f59e0b', '#16a34a']
plt.figure(figsize=(8, 4))
bars = plt.bar(labels, scores, color=colors, edgecolor='white', linewidth=1.2)
for bar, score in zip(bars, scores):
plt.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 1,
f'{score:.1f}', ha='center', va='bottom', fontsize=11, fontweight='bold')
plt.ylabel('综合得分', fontsize=12)
plt.title('五个方案综合评分对比', fontsize=14, fontweight='bold')
plt.ylim(0, 105)
plt.grid(axis='y', alpha=0.3)
plt.tight_layout()
plt.show()
运行效果图
本指南由 MCM520 资料站生成,配套 Python 代码可直接运行。