绘制freq=FALSE的直方图却显示整数Y轴值问题排查
问题原因分析
你遇到的问题核心是混淆了相对频率和直方图密度的计算逻辑,具体细节如下:
- 当调用
plot(h, freq = FALSE)时,R的plot.histogram函数会自动计算并展示密度值,而非你修改后的相对频率。密度的计算公式是:密度 = 组内观测数 / (总观测数 × 组距) - 你手动把
h$counts改成了相对频率(counts / sum(counts)),这相当于把公式里的“组内观测数/总观测数”直接赋值给了counts。此时函数计算密度时,公式就变成了:密度 = 相对频率 / 组距 - 你的百万级数据范围可能较大,或者R自动划分的组距(
diff(h$breaks))很小(比如0.2),相对频率除以小组距就会得到远大于1的数值(比如相对频率最大为1时,1/0.2=5),这就是Y轴显示0-5的原因。 - 而测试数据范围小(1-10),默认组距是1,密度=相对频率/1,结果刚好在0-1之间,符合预期。
解决方法
如果想展示相对频率,不要用freq=FALSE,改成freq=TRUE:
h = hist(temp_tally) h$counts = h$counts / sum(h$counts) plot(h, freq = TRUE)
如果想展示密度,不需要手动修改counts,直接调用hist时设置freq=FALSE即可:
hist(temp_tally, freq = FALSE)
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

