跳到正文
格致开物MATHWIKI

直方图

AIContentBot留言 | 贡献2026年9月20日 (日) 08:47的版本 (补充统计图解:六类图形、完整算例、透明SVG与选图入口)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

直方图(histogram)把一批数值按区间分组,再用相邻矩形显示数据在数轴上的分布。它回答的是“数值集中在哪里、分散到什么程度、哪些范围比较少见”。横轴表示有大小与距离意义的数值;矩形的宽度是区间宽度。在不等宽分组中,面积与频数或频率对应,才能公平比较各组。

把二十个数变成一幅图

设我们记录了二十次排队的等候时间,单位为分钟。以下是为讲解构造的合成数据,已经从小到大排列,不代表实际场所的调查:

1,2,2,3,4,4,5,6,6,7,8,8,9,10,11,12,14,16,18,19.

直接读这串数,可以知道最短为 1 分钟、最长为 19 分钟;要判断“多数人等了多久”,逐个数字比较就不如分组清楚。先按每 5 分钟一组,把观察范围划成四个箱子:

[0,5),[5,10),[10,15),[15,20].

方括号表示包含端点,圆括号表示不包含端点。例如 5 归入第二组,10 归入第三组。最后一组特意包含右端点 20,使整个范围内的值都有归属。这个约定使各组不重叠,也没有遗漏;若把相邻两组都写成闭区间,恰好等于 5 的观察就可能被数两次。

时间区间(分钟) 归入本组的观察值 频数 频率
[0,5) 1,2,2,3,4,4 6 6/20=0.30
[5,10) 5,6,6,7,8,8,9 7 7/20=0.35
[10,15) 10,11,12,14 4 4/20=0.20
[15,20] 16,18,19 3 3/20=0.15

频数是某组包含的观察次数。两个 2 是两次观察,因此都要计数。频率是这一频数除以总观察次数;四组频数之和为 6+7+4+3=20,频率之和为 1。

上方点列显示二十次等候时间,重复值竖直堆叠;下方四个等宽矩形在零至五、五至十、十至十五、十五至二十分钟的频数分别为六、七、四、三
同一批观察从原始点列变成分组频数。上方每个点代表一次观察,下方矩形高度表示这一组有多少次。

读图时先沿横轴找到 5 到 10 分钟,再看对应矩形的高度 7:这表示七次等候落在这个范围内,并不表示有人恰好等了 7 分钟,也不表示平均等候时间为 7 分钟。把前两组相加,得到十三次等候少于 10 分钟,占 13/20=65%。这项结论可以从原始数据、分组表和图中分别核对。

这里四个矩形一样宽,高度就足以比较各组人数。NIST 的统计手册把等宽分组、组内计数列为最常见的直方图构造方式;它还区分了“高度表示频率”和“总面积等于一”的两种归一化。NIST:Histogram

为什么不等组距要看面积

假如我们只关心前十分钟的细节,把后两组合并,分组变成 [0,5)[5,10)[10,20],频数依次为 6、7、7。后两组的人数一样,但第三组覆盖 10 分钟,第二组只覆盖 5 分钟。若都画成高 7 的矩形,第三块的面积就会是第二块的两倍;视觉上占据两倍面积,实际却没有两倍观察。

解决办法是把“每组多少次”换成“每单位宽度多少次”。第三组的频数密度为 7/10=0.7 次/分钟,第二组为 7/5=1.4 次/分钟。第三组宽一倍、高一半,两组面积就都等于 7。这里“次/分钟”描述的是等候时间数轴上的计数密度,不是队列每分钟接待多少人的到达率。

为便于比较不同样本量,也可以先除以总次数 20,把矩形面积归一化为频率。设第 j 组的宽度为 wj>0,频数为 nj,总次数为 n>0,那么频率密度

dj=nj/nwj=njnwj.

除以 wj 的理由就在矩形面积公式里。把第 j 组的面积记为 Aj,则

Aj=wjdj=wjnjnwj=njn.

把各组面积相加,宽度逐一消去:

jwjdj=jnjn=1.

区间(分钟) 宽度 频数 频率 频率密度(每分钟)
[0,5) 5 6 0.30 0.30/5=0.06
[5,10) 5 7 0.35 0.35/5=0.07
[10,20] 10 7 0.35 0.35/10=0.035
不等组距密度直方图,三个区间宽度为五、五、十,高度为零点零六、零点零七、零点零三五;后两组面积同为零点三五
宽度改变时,高度要相应调整。横轴为分钟,纵轴为频率密度,矩形内标出的是面积。

图中第三块虽然较矮,却与第二块有同样面积 0.35。若问题是“有多少比例落在 10 到 20 分钟”,读取面积;若问题是“哪一段单位时间范围内更密集”,比较高度。R 的官方直方图文档同样把不等宽分组默认画成总面积为一的密度图。R:hist 的 freq、breaks 与 Details

密度的数值可以超过 1。例如把十个观测值全部放在宽度为 0.2 的一个区间里,频率为 1,密度就是 1/0.2=5,面积仍为 5×0.2=1。超过 1 的是每单位宽度的高度,并非概率超过 1。

组内位置为什么找不回来了

在第二幅图里,10 到 20 分钟这十分钟被一整块平顶矩形代替。它保存了“共七次”这一事实,却没有保存这七次分别发生在 10、11、12、14、16、18、19 分钟。只看这幅分组图,无法恢复七个原始值。

例如想知道少于 12 分钟的比例。原始数据给出十五次,因此实际样本比例为 15/20=0.75。若只留下不等宽直方图,把 10 到 12 分钟的部分面积加到前两组面积上,得到

0.30+0.35+(1210)×0.035=0.72.

两个答案不同,原因是部分矩形面积相当于把这组的频率均匀摊在 10 到 20 分钟之间;原始七个值并未均匀分散。完整箱子的面积精确给出这批数据的组频率,箱子内部的部分面积则是分组后的近似。 如果分析必须准确区分 12 分钟前后,应在 12 处设置组界,或直接使用原始数据。

直方图可以作为概率密度的估计图,但这一用法还需要明确数据如何采集,以及这些观察能否代表目标总体。分组作图本身并不要求数据相互独立;把图推广为总体分布的估计,才要考虑抽样机制、依赖关系和样本量等条件。二十次特定时段的等候,不会仅因画成直方图就代表全天、所有日期或所有顾客。

箱宽改变,哪些细节会出现或消失

仍然使用最初的二十个数,把箱宽依次改成 2、5、10 分钟,均从 0 开始分组,并统一用频率密度作纵轴。这样纵轴和面积含义相同,形状才可直接比较。

同一组二十个等候时间分别按二、五、十分钟宽度分箱的三幅密度直方图;细分箱显示局部起伏,宽分箱只保留前十分钟比后十分钟集中
三个面板共用数轴与密度尺度,箱宽分别为 2、5、10 分钟。改变的是分组,不是观测数据。

箱宽 2 时,十组频数为 1,3,3,3,3,2,1,1,1,2。例如 [2,4) 包含 2、2、3,密度为 3/(20×2)=0.075。箱宽 5 时,四组频数为 6,7,4,3;箱宽 10 时,只剩 13,7,高度为 0.065,0.035。前两幅中 18 到 20 分钟附近的局部起伏,在最后一幅里被合并掉了。

细箱保留更多局部差异,也更容易把少数观测的偶然聚集显成峰;粗箱较平稳,却可能把两个不同的聚集区合成一个。单凭一幅图里有两个高柱,不能判断总体一定有两个峰。

箱子从哪里开始也会改变计数。对等宽为 5 的箱子,把组界改成 1,6,11,16,21,同一批数据的频数变成 7,7,3,3。原来边界上的 5 和 10,现在各随新边界改变归组。比较两批数据时,应尽量用同一组边界与同一种纵轴;若一批有 20 次、一批有 200 次,比较频率密度比只比较人数更便于看形状,同时仍应标注各自样本量。

自动分箱与密度估计的研究

大样本很难手工试遍所有箱宽。1979 年,David W. Scott 在《Biometrika》发表 On optimal and data-based histograms,以密度估计的误差为准则研究箱宽选择,并提出利用样本量与标准差、以高斯分布为参照的数据驱动方法。这把“图分得多细”变成了可研究的统计估计问题。Scott,1979,66(3):605–610

常用的 Scott 参考箱宽为 h3.5sn1/3,其中 s 是样本标准差。另一个常见选择是 Freedman–Diaconis 箱宽 h=2IQRn1/3,用箱线图中介绍的四分位距替代标准差作为分散尺度。R 提供这些自动选择方法;若数据全相同,或四分位距为零,直接代入会得到零箱宽,软件需要退回其他处理,使用时应查看最终的分组边界。R:Compute the Number of Classes for a Histogram

这些公式给出起点,而不是保证每批数据都有一种唯一正确的分箱。实际阅读时,可以像上图一样比较几个邻近宽度,保留原始数值或点图,并核对重要结论在合理的分箱变化下是否仍然成立。

与其他统计图的分工

条形图通常比较类别,例如不同交通方式的人数;类别之间的条宽不表示数值区间,换个排列顺序也不会改变类别本身。直方图的横轴是一条有度量意义的数轴,不能按柱高把各区间重新排序,否则“相邻”就失去了原来的含义。相邻矩形共用边界,是因为数值区间连续相接,并非因为每组一定都有观察。

箱线图用中位数、四分位数和须压缩分布,便于并排比较多组;直方图能进一步显示聚集、空隙和多峰,但更依赖分箱。想看等候时间随一天中的时刻怎样变化,应保留采集时序并使用折线图散点图,因为本篇把数据排序、计数以后已经丢失了原来的发生顺序。更多选择见统计图

参考资料