堆积条形图
堆积条形图(stacked bar chart)把同一组的几个非负部分首尾相接,整根条形表示该组总量。直接堆积时纵轴是原来的数量;把每组都归一为 100% 时,纵轴改为组内比例。两种图只差一次除法,却在回答不同的问题,尤其当各组样本量不相同时。
三个地区的出行人数
设 small、middle、large 三个地区分别调查 10、20、40 人,每人只记录一种主要出行方式。三种方式的合成频数如下:
| 地区 | 步行 | 骑行 | 公交 | 合计 |
|---|---|---|---|---|
| small | 6 | 3 | 1 | 10 |
| middle | 8 | 7 | 5 | 20 |
| large | 12 | 10 | 18 | 40 |
在人数图中,small 这根条的底部 6 人为步行,再加 3 人骑行,顶部到 9;最后加 1 人公交,整根到 10。large 的同一三段依次为 12、10、18,终点为 40。每段的长度等于人数,不是它顶部刻度的数值。
要准确比较某一种方式跨地区的数量,步行段因共用零基线较容易读;骑行与公交段的底部会随前段总和移动,仅靠它们的顶端高度容易读错。可以读取段内数字,或改画并排的条形图。堆积图的长处是同时保留各部分与整体,不是让所有内部段都像普通条形一样易比较。
每根都改为百分之百
若问题改成“哪个地区更常以公交为主要出行方式”,应以各自地区的人数为分母。公交比例依次为 、、。步行比例为 ;骑行比例为 。把这些份额依次堆叠,每根高度都是 100%。
第二幅图中 large 的公交占 45%,small 只有 10%;第一幅图中对应人数是 18 和 1。两图结论相互补充。若把第二幅的三根条各自人数忘掉,读者便不知道 10% 是一人、45% 是十八人。全样本的公交比例也不能把三个地区的百分比直接平均: 而 是把三个地区视作等权单位的另一个量。分母不同,问题不同。
部分、整体和图形尺度
做堆积图前应确认各部分互斥且能合成所说的整体。一人若同时步行和乘公交,却被两类都计入,三段的总高就不是“人数”;需要改为“人次”、定义主要方式,或允许多选但不再画成占同一整体的 100%。若有未回答者,还须决定分母是全部调查人还是有效回答者,并在图注标明。
对于可能为负的量,正负值应分别从零堆起,不宜强制变成“100% 构成”;对数轴也不能直接用于普通堆积总高,因为取对数后各段不再按原值相加。两组差异若只看某一个内段,使用共用基线的并排条形或分面图常更清楚。扇形统计图同样表达一个整体的构成,但多个地区并列比较时,统一坐标的百分比堆积条通常更便于看部分随组变化。
参考资料
- ggplot2:堆积与百分之百填充,
position_stack、position_fill及非线性尺度注意事项。 - ggplot2:条形图的计数与数值高度,原始记录计数、预先汇总数值及分组堆积的区别。
- 相关:条形图、扇形统计图、百分比与百分点、分面图。