You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:54:40