R语言直方图X轴分布不均:为何0与1之间无间隔?
为什么直方图中0与1无间隔,1、2、3之间有间隔?
这事儿其实是R的hist()函数默认行为导致的——它用Sturges算法自动计算直方图的区间(breaks),而这个算法是为连续数据设计的,和你的离散整数成绩数据不太匹配。
具体原因拆解:
- 你的成绩是离散整数:0、1、2、3、5(没有4)。
hist()会根据数据范围(0到5)和样本量(103)自动划分等宽区间。按Sturges算法算下来,大概会分成8个区间,组距约0.625,这就导致区间分界点都是非整数(比如0, 0.625, 1.25, 1.875...)。 - 0的数值落在第一个区间
[0, 0.625),1的数值落在第二个区间[0.625, 1.25)——这两个区间是连续的,所以对应的柱子紧挨着,看起来完全没间隔。 - 而1的区间结束在1.25,下一个区间从1.25到1.875,你的2分成绩落在
[1.875, 2.5)区间,3分落在[2.5, 3.125)区间。视觉上,这些柱子的位置和整数成绩没对齐,再加上[3.75, 4.375)这个区间(对应4分,你数据里没有)完全没数据,就会让1、2、3的柱子之间看起来有“空隙”。
解决办法:适配离散数据的直方图
你可以手动指定breaks参数,让每个柱子精准对应一个成绩整数,消除奇怪的间隔:
# 获取成绩的最小和最大值 min_note <- min(xls$X__1) max_note <- max(xls$X__1) # 设置breaks为整数加减0.5,每个整数对应一个独立柱子 hist(xls$X__1, main='Notenverteilung', xlab='Note (0 = keine Beurteilung)', ylab='Anzahl', breaks = seq(min_note - 0.5, max_note + 0.5, 1))
这样设置后,每个柱子的中心刚好对应一个成绩整数,柱子之间连续排列,就和你预期的成绩分布直方图一致了。
内容的提问来源于stack exchange,提问作者Berndinox
相关产品推荐
相关产品推荐

