假设我需要绘制如下数据集:
set.seed(1)
dataset <- sample(1:7, 1000, replace=T)
hist(dataset)
正如您在下图所示,两个最左边的垃圾桶之间没有任何空间,与其他垃圾箱不同。
我尝试更改xlim,但它没有用。基本上我想将每个数字(1到7)表示为一个bin,另外,我希望任何两个相邻的bin在它们之间有空间...谢谢!
答案 0 :(得分:9)
最好的方法是手动设置breaks
参数。使用代码中的数据
hist(dataset,breaks=rep(1:7,each=2)+c(-.4,.4))
给出以下图:
第一部分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