R Hist:'break'值与bin数量/大小之间的关系

时间:2018-05-02 00:53:17

标签: r histogram

关于R /中的HIST / hist()函数,任何人都可以帮我找到:

一个非常简单的定义,解释了'break'的指定值与直方图中产生的bin数之间的关系?

例如,我使用随R工具提供的基本数据集:

data(mtcars)
hist(mtcars$mpg, break=3) --> will draw 3 bins (really??? weird!)
hist(mtcars$mpg, break=4) --> will draw 5 bins 
hist(mtcars$mpg, break=5) --> will draw 5 bins no change, same as breaks=4
hist(mtcars$mpg, break=6) --> will draw 5 bins no change, same as breaks=4
hist(mtcars$mpg, break=7) --> will draw 5 bins no change, same as breaks=4
hist(mtcars$mpg, break=8) --> will draw 5 bins no change, same as breaks=4
hist(mtcars$mpg, break=9) --> will draw 11 bins (why???)

为什么断裂= 4,5,6,7,8导致相同的箱数和断点= 3导致只有4箱,......?

您可以在?hist或以下链接找到的R文档: http://localhost//library/graphics/html/hist.html

没有真正的帮助,我试图在“breaks =”中指定的值,bin的大小和bin的数量之间建立任何链接,我找不到简单或简单的公式或解释来扣除这样的“链接”。

我只是不明白它是什么意思“break = 3”? 这是否意味着“3次休息”或者是否意味着“每3个单位休息一次”或者完全不同的东西?

我真的很感激任何提示,帮助,指点。

谢谢。

1 个答案:

答案 0 :(得分:3)

hist的文档说明当您将分组指定为单个数字时(就像您所做的那样),那么

  

这个号码只是一个建议;因为断点将被设置为   漂亮的价值观

如果您点击pretty文档的链接,则说明

  

选择这些值使它们是10的幂的1,2或5倍。

你不能以4个均匀间隔的1,2,5或10的倍数跨越10到35之间的间隙,因此它选择了5个区间(6个断点)。如果你真的想要四个均匀间隔的箱子,你可以使用

hist(mtcars$mpg, seq(10,35, length.out=5))

Histogram with 4 bins

请注意,您需要使用length.out = 5来获得四个分箱(四个起点加一个额外的终点)。当然,这并没有给出漂亮的"值。

如果你不喜欢x轴上的刻度不与垃圾箱对齐,(我不会),你可以在{{1}中留下轴并自己添加。

hist

Histogram 2

H = hist(mtcars$mpg, seq(10,35, length.out=5), axes=FALSE, ylim=c(0,14)) axis(side=1, at=seq(10,35, length.out=5)) axis(side=2, pretty(0:14))

的进一步解释

文档breaks在休息时说,有5种类型的值可用于休息。你正在使用的是:

  

给出直方图的单元格数的单个数字

但如上所述,文档补充说:

  

这个号码只是一个建议;断点将设置为漂亮的值。

所以当你给?hist论证hist时,它知道你想要 4个分档,但它也会坚持使用"漂亮"边界的值,即均匀间隔倍数为1,2,5次幂的倍数。端点上也可能存在约束。

让我们研究一下你的mtcars $ mpg数据。 通过保存返回值,您可以获得有关breaks=4正在执行的操作的大量信息。我也会抑制直方图的实际绘图,因为我现在只对该值感兴趣。

hist

您可以打印HV并查看有很多信息 关于直方图。我们关心的所有内容都存储在HV = hist(mtcars$mpg, 4, plot=FALSE)

breaks

这给出了箱子的6个边界值(需要5个箱子 6个边界值)。但我们要求4个箱子,而不是5个箱子!如果你拆分了 范围10-35到四个箱子你得到了界限 10,16.25,22.5,28.75和35.这些不是很好的"边界值。 相反,HV$breaks [1] 10 15 20 25 30 35 使用hist函数来查找边界的更好值,但这意味着它必须放弃使用4个bin。

我们可以获得一系列休息值的断点数? 让我们试试2次最多20次休息。

pretty

再次注意:4个断点意味着3个分档。 6个断点意味着5个分档。只有四种不同 创建的拆分。它们是什么?

sapply(2:20, function(n) 
    length(hist(mtcars$mpg, n, plot=FALSE)$breaks))
 [1]  4  4  6  6  6  6  6 13 13 13 13 13 13 13 13 25 25 25 25

边界改变10,5 2或1 - 相当的边界。

如果您想要更多控制权,则需要能够指定 你想要的边界。这就是我在上面的例子中所做的。指定unique(lapply(2:20, function(n) hist(mtcars$mpg, n, plot=FALSE)$breaks)) [[1]] [1] 10 20 30 40 [[2]] [1] 10 15 20 25 30 35 [[3]] [1] 10 12 14 16 18 20 22 24 26 28 30 32 34 [[4]] [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 的其他选项之一是:

  

给出直方图单元格之间断点的向量

这是我在指定breaks时使用的内容。 但请注意值:

seq(10,35, length.out=5)

不漂亮。

所以你可以轻松漂亮,但没有良好的控制 超过箱数或你可以控制数量 以更多工作和更丑陋的边界为代价的垃圾箱。