当我运行代码
hist(1:5)
Run Code Online (Sandbox Code Playgroud)
要么
hist(c(1,2,3,4,5))
Run Code Online (Sandbox Code Playgroud)
生成的直方图显示,当阵列中只有一个"1"时,第一个数字"1"的频率为2.

我也试过了
hist(c(1,2,3,7,7,7,9))
Run Code Online (Sandbox Code Playgroud)
但它仍然显示第一个柱子比第二个柱子高两倍

但是,当我跑
hist(c(1:10))
Run Code Online (Sandbox Code Playgroud)
每个条的频率高度相等
我对统计数据和R很新,所以我不知道这背后的原因是什么.我希望有人可以帮我澄清为什么会这样.谢谢

Sco*_*hie 12
以您的第一个例子为例,hist(1:5)您有五个数字,这些数字被放入四个箱子中.因此,这五个中的两个被归为一个.
直方图有在休息2,3,4,和5,这样你就可以合理地推断出的定义hist为,其中一些被绘制,是:
#pseudocode
if (i <= break) { # plot in bin }
Run Code Online (Sandbox Code Playgroud)
您可以手动指定中断来解决此问题:
hist(1:5, breaks=0:5)
Run Code Online (Sandbox Code Playgroud)

试试这个:
> trace("hist.default", quote(print(fuzzybreaks)), at = 25)
Tracing function "hist.default" in package "graphics"
[1] "hist.default"
>
> out <- hist(1:5)
Tracing hist.default(1:5) step 25
[1] 0.9999999 2.0000001 3.0000001 4.0000001 5.0000001
> out$count
[1] 2 1 1 1
Run Code Online (Sandbox Code Playgroud)
它显示了fuzzybreaks它使用的实际值以及每个bin中的计数.显然,第一个箱子中有两个点(在0.9999999和之间2.0000001)和每个其他箱子中有一个点.
与之比较:
> out <- hist(1:5, breaks = 0:5 + 0.5)
Tracing hist.default(1:5, breaks = 0:5 + 0.5) step 25
[1] 0.4999999 1.5000001 2.5000001 3.5000001 4.5000001 5.5000001
> out$count
[1] 1 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
现在每个箱子中都有一个点.
你看到的是,hist放入1:5四个箱子.所以会有一个有2个计数的垃圾箱.
如果您指定截止点,如下所示:
hist(1:5, breaks=(c(0.5, 1.5, 2.5, 3.5, 4.5 , 5.5)))
Run Code Online (Sandbox Code Playgroud)
然后你会得到你期望的行为.