如何在R中分离直方图的两个最左边的二进制位

时间:2013-01-18 04:59:58

标签: r histogram

假设我需要绘制如下数据集:

set.seed(1)
dataset <- sample(1:7, 1000, replace=T)
hist(dataset)

正如您在下图所示,两个最左边的垃圾桶之间没有任何空间,与其他垃圾箱不同。

enter image description here

我尝试更改xlim,但它没有用。基本上我想将每个数字(1到7)表示为一个bin,另外,我希望任何两个相邻的bin在它们之间有空间...谢谢!

2 个答案:

答案 0 :(得分:9)

最好的方法是手动设置breaks参数。使用代码中的数据

hist(dataset,breaks=rep(1:7,each=2)+c(-.4,.4))

给出以下图:

enter image description here

第一部分rep(1:7,each=2)是你希望条形图居中的数字。第二部分控制条的宽度;如果你将它改为c(-.49,.49),它们几乎会触及,如果你将其改为c(-.3,.3),你就会变得更窄。如果您将其设置为c(-.5,.5),则R会对您大吼大叫,因为您的breaks向量中的数字不允许两次。

为什么这样做?

如果你拆分了断裂向量,你会得到一个如下所示的部分:

> rep(1:7,each=2)
 [1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7

和第二部分看起来像这样:

> c(-.4,.4)
 [1] -0.4  0.4

当你将它们加在一起时,R会根据需要多次循环第二个向量,使其与第一个向量一样长。所以你最终得到了

  1-0.4  1+0.4  2-0.4  2+0.4  3-0.4  3+0.4 [etc.]
=   0.6    1.4    1.6    2.4    2.6    3.4 [etc.]

因此,你有一个从0.6到1.4的栏 - 以1为中心,宽度为2 * .4 - 另一个从1.6到2.4的栏,以2 * .4为中心,依此类推。如果你之间有数据(例如2.5)那么直方图看起来有点傻,因为它会创建一个从2.4到2.6的条形,条形宽度不会是均匀的(因为那条条只有.2宽,而所有其他人都是.8)。但只有整数值不是问题。

答案 1 :(得分:-3)

你需要六个酒吧而不是七个酒吧;这就是你的直方图有空间的地方。但是你最终会产生七个酒吧。那是错误。

做样本(1:6,1000,替换= T)而不是样本(1:7,1000,替换= T)

如果你确实需要7个小节,那么种子为0