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

Ale*_*lex 7 r histogram

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

set.seed(1)
dataset <- sample(1:7, 1000, replace=T)
hist(dataset)
Run Code Online (Sandbox Code Playgroud)

正如您在下面的图中所看到的,两个最左边的垃圾箱之间没有任何空间,与其他垃圾箱不同.

在此输入图像描述

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

Jon*_*sen 9

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

hist(dataset,breaks=rep(1:7,each=2)+c(-.4,.4))
Run Code Online (Sandbox Code Playgroud)

给出以下图:

在此输入图像描述

第一部分rep(1:7,each=2)是你想要的数字以数字为中心的数字.第二部分控制条的宽度; 如果你改变c(-.49,.49)它们几乎触摸它们,如果你改变它c(-.3,.3)你会得到更窄的酒吧.如果你把它设置为c(-.5,.5)R ,那么R会对你大喊大叫,因为你的breaks矢量中不允许两次使用相同的数字.

为什么这样做?

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

> rep(1:7,each=2)
 [1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7
Run Code Online (Sandbox Code Playgroud)

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

> c(-.4,.4)
 [1] -0.4  0.4
Run Code Online (Sandbox Code Playgroud)

当你将它们加在一起时,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.]
Run Code Online (Sandbox Code Playgroud)

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