大家好,我是你们的小帅学长。
堆叠柱状图(Stacked Bar)有一种天然的“高级感”:一根柱子里塞满了结构信息,总量 + 组成,一图搞定。
很多同学第一次学会 bottom= 参数时都会兴奋地说一句:“这个图信息量好大!”
但问题来了——信息量大 ≠ 可读性强;结构丰富 ≠ 对比清晰。
事实上,堆叠柱是最容易“看起来完整、实际上难比较”的图之一。这一篇,我们不讲怎么画,而讲什么时候不要用。
01.堆叠柱到底在表达什么?
堆叠柱本质上在表达两件事:一是每个类别的总量;二是每个类别内部的组成结构。
所以它适合回答的问题是:总量随组别变化吗?组成比例大致如何?
但它不擅长回答的问题是:中间层谁更大?结构变化趋势清晰吗?不同组之间某一组成差多少?
一旦你想比较“中间层”,问题就开始了。
02.堆叠柱最核心的问题:只有第一层有固定基线
这是理解堆叠柱误区的关键。
在一根堆叠柱中:第一层有固定基线(0);第二层开始“漂浮”;第三层更漂浮;第四层……已经没有直观基线了。
我们对“长度”的比较依赖于共同基线。一旦没有共同基线,我们比较能力会急剧下降。这就是为什么:堆叠柱越往上,越难比较。
03.四种典型“不该用堆叠柱”的场景
场景 1:你想比较中间层
例如:不同地区中,“工业排放”谁更高?不同模型中,“Recall”谁更高?
如果它不是底层组成,堆叠柱会严重干扰判断。
替代方案:分组柱 或 分面图(每个组成单独比较)
场景 2:类别很多(>4)
堆叠层数一多:颜色变得难区分、图例需要来回对照、认知负担急剧上升,
读者不是在“读图”,而是在“找颜色”。
替代方案:只保留 Top-N,其余合并为 “Other”,或者改为 100% 占比图(如果你关心比例)
场景 3:你真正关心的是比例,而不是总量
如果你的重点是:结构占比变化
那普通堆叠柱会把总量变化混进来,让比例变化变得不清晰。
替代方案:100% 堆叠柱(归一化)
场景 4:需要精确对比
堆叠柱天生不适合精确比较差值。
如果你想表达:A 比 B 多 3%;某层增长了 5 单位,堆叠柱会让这些变化变得模糊。
替代方案:分组柱 + 误差线;或者点图。
04.堆叠柱什么时候是对的?
堆叠柱适合:
展示整体规模 + 结构
只关心“总量是否增长”
组成类别不超过 3–4 个
堆叠柱适合“宏观结构感知”,不适合“精确对比分析”。
05.一个直观对比思维实验
假设有三座城市,每座城市的能源结构:煤炭、天然气、可再生能源。
如果你问“哪座城市总能耗最高?”——堆叠柱很好。
但如果你问“哪座城市的可再生能源比例更高?”——普通堆叠柱就开始误导。如果你问“天然气增长最快的是哪座?”——几乎看不出来。
这就是图形和问题匹配的重要性。
如果你发现自己在堆叠柱里盯着中间层反复看,那说明它已经不适合这个问题了。
堆叠柱看起来信息量最大,但它最容易牺牲比较能力;当你真正关心差异时,不要让结构感掩盖了对比本身。
下一篇我打算讲《点图(Dot plot)替代柱状》,很多时候,一根粗柱子,其实可以用一个干净的点替代。而那一个点,往往更诚实,也更优雅。
——期待你的关注——
往期内容:
用Python做科研级画图——分组对比
用Python做科研级画图——柱状图基础
用Python做科研级画图——折线图基础模板
用Python做科研级画图——配色与色带:连续离散怎么选
用Python做科研级画图——论文级排版检查清单(Checklist)