【问题标题】:Modify bin labels histogram修改 bin 标签直方图
【发布时间】:2014-07-30 12:45:23
【问题描述】:

我做了以下直方图:

one <- c(2,2,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,6,7,8)
hist(one, breaks = 3)

我需要 x 轴上的三个标签来总结如下值的范围,而不是 x 轴上 2-8 的范围:2-3; 4-5; 6-8

如何修改 x 轴的代码以仅获得三个标签,并位于正确的位置?

【问题讨论】:

    标签: r histogram axis-labels


    【解决方案1】:

    使用以下方法很容易标记范围的中点:

    h <- hist(one, breaks = 3, xaxt = 'n')
    axis(1, h$mids, h$mids)
    

    但如果你想让标签成为命名范围的字符串,你必须做更多的工作。看看str(h),看看你需要做什么:

    > str(h)
    List of 6
     $ breaks  : num [1:4] 2 4 6 8
     $ counts  : int [1:3] 12 6 2
     $ density : num [1:3] 0.3 0.15 0.05
     $ mids    : num [1:3] 3 5 7
     $ xname   : chr "one"
     $ equidist: logi TRUE
     - attr(*, "class")= chr "histogram"
    

    您可以使用breaks 元素来构造轴标签:

    h <- hist(one, breaks = 3, xaxt = 'n')
    axis(1, h$mids, paste(h$breaks[1:3], h$breaks[2:4], sep=' - '))
    

    【讨论】:

    • 谢谢。我不明白粘贴命令中方括号中指定的内容:paste(h$breaks[1:3], h$breaks[2:4], sep=' - ')。你能帮我理解一下,以便我可以推广到其他情节吗?
    • @windy 您的直方图中有三个条形(因为您指定了breaks = 3)。结果,来自hist 的响应对象的breaks 元素有4 个数字(代表条形之间的切点以及全局最小值和最大值)。该表达式中的括号提取前三个元素(每个条的下限)和最后三个元素(每个条的上限)来构造范围标签。