【问题标题】:Histogram in R combining first two valuesR中的直方图结合前两个值
【发布时间】:2014-04-21 03:51:07
【问题描述】:

我在 R 中绘制直方图,前两个频率被合并到一个我不想要的 bin 中。数据中有七个可能的值,我想要 7 个 bin,而不是 6 个。

R绘制的直方图中的信息是,

$breaks
[1]  9 10 11 12 13 14 15

$counts
[1] 27  6  5  4  1 11

$density
[1] 0.50000000 0.11111111 0.09259259 0.07407407 0.01851852 0.20370370

$mids
[1]  9.5 10.5 11.5 12.5 13.5 14.5

$xname
[1] "data$hour"

$equidist
[1] TRUE

attr(,"class")
[1] "histogram"

问题在于 $counts,它们应该是:

9-20
10-7
11-6
12-5  
13-4
14-1
15-11

直方图和信息生成的数据和命令是:

temp <- c(9, 9, 9, 11, 12, 14, 15, 9, 9, 9, 10, 9, 13, 13, 15, 15, 9, 
9, 9, 11, 12, 13, 15, 15, 15, 9, 9, 10, 11, 12, 9, 10, 10, 12, 
15, 9, 9, 9, 9, 10, 11, 15, 9, 10, 10, 11, 11, 12, 13, 15, 15, 
9, 9, 15)

hist(temp)
histinfo = hist(temp)
histinfo

如何纠正?我的想法是计算出现次数并绘制条形图,但这似乎有点矫枉过正,因为 hist 已经内置。我尝试更改中断无济于事。

谢谢。

【问题讨论】:

    标签: r histogram


    【解决方案1】:

    table 函数与barplot 一起使用

    > barplot(table(temp))
    

    【讨论】:

    • 低俗又简单。谢谢。
    【解决方案2】:

    使用 hist 时,如果您想要每个项目,则需要用括号括起来两端。因此,以下将起作用。

    hist(temp, breaks = 8:15)
    

    如果您不喜欢 x 轴上的 8,则必须先抑制它,然后再绘制 x 轴

    hist(temp, breaks = 8:15, xaxt = 'n')
    axis(1, 8:14+0.5, 9:15)
    

    不幸的是,内置的 hist 函数可能应该主要用于探索而不是发布,所以如果您知道您使用 right = TRUE 之类的参数调用了该函数,那么您应该清楚第一个输出是什么图表表示且易于解释(即显然没有低于 8 的内容)。

    【讨论】:

    • 谢谢约翰。 8 不是有效值,但以这种方式显示在直方图上。可以在没有8出现的情况下完成吗?直方图现在确实有正确数量的 bin。
    【解决方案3】:

    绘制直方图时必须设置breaks

    就个人而言,我会手动将数据制成表格并绘制条形图。这可能是你真正想要的,也可能不是。

    library(reshape)
    temp.melt <- melt(table(temp))
    
    library(ggplot2)
    ggplot(temp.melt, aes(x = temp, y = value)) +
      theme_bw() +
      geom_bar(stat = "identity")
    

    【讨论】:

    • 谢谢罗曼。这当然可以,尽管这似乎比必要的要多。但看起来我错了。
    • 在阅读了下面关于 hist 不适合出版的 John 的 cmets 后,我正在实施条形图。这也是我开始使用 ggplot 的好时机。图形确实看起来好多了。
    【解决方案4】:

    虽然已经回答了这个问题,但我发现这是最简单的,同时还生成了最好看的默认图表:

    library(ggplot2)
    qplot( factor(temp) )
    

    【讨论】:

    • 这当然是最简单最好看的了。我的印象是 R 用户不喜欢 qplot。不是这样吗?我没有这方面的经验。
    • 我认为qplot 很好。这是一个具有合理默认值的好工具,而且您可以像 ggplot 函数一样“添加”所有其他修改。
    • 谢谢克里斯托弗,我会调查的。
    【解决方案5】:

    我认为这是一个错误。在默认参数下,断点应该是右闭左开。根据文档,对于breaks=c(9, 10, 11, 12,13,14,15),断点应该是 (9, 10], (10, 11], (11,12], (12,13], (13,14], (14,15])。这意味着根本不会绘制 9。似乎hist 决定include.lowest=TRUE(尽管除非您提供breaks 向量,否则忽略参数),因此第一个间隔实际上是[9, 10]。

    【讨论】:

      【解决方案6】:

      我最近遇到了同样的问题,除了使用 HIST 图别无选择。我的数据从零开始,但它不断组合前两组,如上所述。在玩了很长一段时间后,尝试手动设置中断而没有任何影响,我终于能够通过以负值 (-) 开始中断来使其正常工作。 break=c(-1:9) 最终为我工作。我希望这对您的问题也有帮助。

      加里

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-16
        • 1970-01-01
        • 1970-01-01
        • 2020-12-31
        • 2018-11-14
        • 1970-01-01
        • 2021-09-05
        相关资源
        最近更新 更多