在R中生成均匀分布后直方图边缘异常偏高的原因
直方图边缘偏高的原因分析
核心问题出在
hist()函数对breaks参数的处理逻辑上:当你传入整数(比如breaks=7)时,R不会严格生成等宽的7个区间,而是会自动调整断点为“更整齐”的数值(比如整数),这会导致区间宽度差异极大,进而让边缘区间的频数异常偏高。拿你的数据
c1 <- seq(1,10,0.1)举例:- 数据是从1到10、步长0.1的均匀序列,共91个值;
- 指定
breaks=7后,R可能会生成断点1,2,3,4,5,6,7,10,这样就得到7个区间:- 前6个区间宽度都是1(比如
[1,2)、[2,3)),每个区间包含10个数值(比如1到1.9); - 最后一个区间宽度是3(
[7,10]),包含31个数值(7到10);
- 前6个区间宽度都是1(比如
- 最后一个区间的频数远高于其他区间,自然会让直方图右侧边缘的柱子看起来明显偏高。
补充:
right=FALSE只是指定区间为左闭右开,主要影响断点处数值的归属,不是导致边缘偏高的核心原因。
如果想要生成严格等宽的7个区间,手动指定断点即可:
breaks <- seq(1, 10, length.out = 8) hist(c1, breaks = breaks, right = FALSE, ylim = c(1, 15))
这样每个区间的频数都是13,所有柱子高度一致。
内容的提问来源于stack exchange,提问作者Blue Scenario
相关产品推荐
相关产品推荐

