【问题标题】:How to separate the two leftmost bins of a histogram in R如何在R中分离直方图的两个最左边的bin
【发布时间】:2013-01-18 04:59:57
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: r histogram


    【解决方案1】:

    最好的方法是手动设置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)。但是只有整数值是没有问题的。

    【讨论】:

    • 您能否详细说明rep(1:7, each=2)?基本上使用 1, 1, 2, 2, 3, 3, ...,7,7 来告诉 R 我想将条形置于 1,2,..,7 周围的逻辑是什么?谢谢!
    • 哦,好吧,我还是去做了。也许它会帮助别人。
    • 还有一个问题:请注意,在您的代码创建的图中,y 轴现在显示的是密度而不是频率。有没有保留频率?
    • 您可以:hist(dataset,breaks=rep(1:7,each=2)+c(-.4,.4),freq=TRUE)。由于条的宽度不同(例如我提到的假设的 2.4-2.6 条),它会警告“区域错误”,但情节是正确的。
    【解决方案2】:

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

    执行 sample(1:6, 1000, replace=T) 而不是 sample(1:7, 1000, replace=T)

    如果您确实需要七个小节,则以 0 为种子

    【讨论】:

    • 他的数据集中的值从 1 到 7;为什么他应该有 6 条而不是 7 条?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多