均匀分布的直方图未在R中正确绘制

时间:2014-03-15 13:03:10

标签: r

当我运行代码时

hist(1:5)

hist(c(1,2,3,4,5))

生成的直方图显示,当阵列中只有一个“1”时,第一个数字“1”的频率为2。

enter image description here

我也试过

hist(c(1,2,3,7,7,7,9))

但它仍然表明第一个柱子比第二个柱子高两倍

enter image description here

然而,当我跑

 hist(c(1:10))

每个条的频率高度相等

我对统计数据和R很新,所以我不知道这背后的原因是什么。我希望有人可以帮我澄清为什么会这样。谢谢

enter image description here

3 个答案:

答案 0 :(得分:12)

以第一个例子hist(1:5)为例,您有五个数字,这些数字被放入四个箱子中。因此,这五个中的两个被归为一个。

直方图在2345处有中断,因此您可以合理地推断出hist的定义数字被绘制,是:

#pseudocode
if (i <= break) { # plot in bin }

您可以手动指定中断来解决此问题:

hist(1:5, breaks=0:5)

enter image description here

答案 1 :(得分:8)

试试这个:

> 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

显示它正在使用的实际fuzzybreaks值以及每个bin中的计数。显然,第一个bin中有两个点(0.99999992.0000001之间),每个其他bin中有一个点。

与:比较:

> 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

现在每个垃圾箱中都有一个点。

答案 2 :(得分:5)

您所看到的是,hist将1:5放入四个区间。所以会有一个有2个计数的垃圾箱。

如果您指定截止点,请执行以下操作:

 hist(1:5, breaks=(c(0.5, 1.5, 2.5, 3.5, 4.5 , 5.5)))

然后你会得到你期望的行为。