7

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

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

正如您在下图中看到的那样,与其余的垃圾箱不同,最左边的两个垃圾箱之间没有任何空间。

在此处输入图像描述

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

4

2 回答 2

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 为中心,以 2*.4 为中心,依此类推。如果你有介于两者之间的数据(例如 2.5),那么直方图看起来有点傻,因为它会创建一个从 2.4 到 2.6 的条形图,并且条形图的宽度不会是均匀的(因为那个条形图只有 0.2 宽,而其他都是 0.8)。但是只有整数值不是问题。

于 2013-01-18T05:10:35.477 回答
-3

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

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

如果您确实需要七个条形图,则以 0 为种子

于 2013-01-18T05:10:25.277 回答