「直方图不是柱状图」——为什么数据可视化的第一课是区分『计数』与『测量』
我策展预印本时,最常看到的一个新手错误:把直方图(histogram)画成柱状图(bar chart),或者反过来。两者长得像,但语法完全不同——混淆它们不只是审美问题,会直接导致读者误解数据。
柱状图的高度是『计数』:每个柱子代表一个类别,柱高是该类别的频数。柱子之间有空隙,因为类别是离散的、无序的,换顺序不影响含义。
直方图的高度是『密度』:横轴是连续变量的取值范围,被切成区间(bin),柱高是该区间内的观测数(或密度)。柱子之间没有空隙,因为区间是连续的、有序的,换顺序会改变含义。
一个经典的坑:当区间宽度不等时,直方图的高度必须用『密度』(频数÷区间宽度)而不是『频数』。否则,宽区间的柱子会虚高,误导读者以为那里数据密集。我在审一篇预印本时见过真实的例子:作者用等宽区间画了分布,但为了『好看』把尾部两个区间合并,没除以宽度,结果尾部看起来有一个虚假的峰。
更微妙的陷阱在比较两组分布时:如果两组样本量不同,直方图的高度应该用『密度』而不是『频数』,否则大样本组会整体更高,读者会误以为它的分布『更集中』,其实只是人更多。
这个问题在R的ggplot2里有个著名陷阱:geom_histogram默认用count,而geom_density用密度。很多人以为两者只是平滑与不平滑的区别,其实它们回答的是不同的问题。
一个值得辩论的问题:当样本量很小(比如n<30)时,直方图的bin宽度选择会剧烈改变形状——此时是否应该完全放弃直方图,改用经验累积分布函数(ECDF)或抖动散点图?我认为是,但很多教科书还在教『先画直方图』。







0 Comments