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

为何R中hist(X, freq=FALSE)与手动绘制的直方图Y轴不同?

直方图Y轴刻度差异的原因分析

你用hist(X, freq=FALSE)绘制的直方图,和手动用barplot模拟的图Y轴刻度存在差异,核心原因是两者计算的统计量定义完全不同:

  • hist(..., freq=FALSE)生成的是密度直方图:它计算的是概率密度,公式为:
    密度 = 组内频数 / (总样本量 × 组距)
    这个定义保证所有矩形的面积之和为1,符合概率密度函数的核心性质。

  • 你的手动代码计算的是相对频数(频率):freq_table / sum(freq_table)得到的是每组样本占总样本的比例,所有组的频率之和为1,但没有除以组距——因此数值上和密度差了「1/组距」的倍数(这里组距是0.5,所以密度是频率的2倍)。

修正后的手动实现代码

要让手动代码和hist(freq=FALSE)效果一致,只需将相对频数除以组距,得到概率密度:

set.seed(123)
X <- rnorm(100)

par(mfrow = c(1, 2))

# 原生hist密度直方图
hist(X, freq = FALSE, main = "", xlab = "", ylab = "")

# 手动实现等效的密度直方图
breaks <- seq(-2.5, 2.5, by = 0.5)
bin_width <- diff(breaks)[1] # 获取组距
freq_table <- table(cut(X, breaks = breaks, include.lowest = TRUE))
# 计算概率密度:相对频数 / 组距
density_values <- freq_table / (sum(freq_table) * bin_width)
barplot(density_values, main = "", xlab = "", ylab = "", names.arg = names(freq_table))

运行这段代码后,两张图的Y轴刻度就会完全匹配,因为两者都基于概率密度进行绘制。

内容的提问来源于stack exchange,提问作者John Stone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:23:19