关于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个单位休息一次”或者完全不同的东西?
我真的很感激任何提示,帮助,指点。
谢谢。
答案 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))
请注意,您需要使用length.out = 5来获得四个分箱(四个起点加一个额外的终点)。当然,这并没有给出漂亮的"值。
如果你不喜欢x轴上的刻度不与垃圾箱对齐,(我不会),你可以在{{1}中留下轴并自己添加。
hist
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)
不漂亮。
所以你可以轻松漂亮,但没有良好的控制 超过箱数或你可以控制数量 以更多工作和更丑陋的边界为代价的垃圾箱。