假设我需要绘制如下数据集:
set.seed(1)
dataset <- sample(1:7, 1000, replace=T)
hist(dataset)
正如您在下图中看到的那样,与其余的垃圾箱不同,最左边的两个垃圾箱之间没有任何空间。
我尝试更改 xlim,但没有成功。基本上我希望将每个数字(1 到 7)表示为一个 bin,此外,我希望任何两个相邻的 bin 之间都有空间......谢谢!
最好的方法是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 为中心,以 2*.4 为中心,依此类推。如果你有介于两者之间的数据(例如 2.5),那么直方图看起来有点傻,因为它会创建一个从 2.4 到 2.6 的条形图,并且条形图的宽度不会是均匀的(因为那个条形图只有 0.2 宽,而其他都是 0.8)。但是只有整数值不是问题。
你需要六根而不是七根;这就是你的直方图有空间的地方。但是你最终会生成七个条形图。那是错误。
做样本(1:6,1000,替换=T)而不是样本(1:7,1000,替换=T)
如果您确实需要七个条形图,则以 0 为种子