【问题标题】:How to specify classes'length in ggplot Histograms?如何在ggplot直方图中指定类的长度?
【发布时间】:2017-05-05 10:22:53
【问题描述】:

我处理一个数据,我有 2 个类似的变量:

 AgeC        NbSin2003(NbClaim)
[39.5,47.5)     0
[39.5,47.5)     1
[51.5,58.5)     0
[20,27.5)       0
[39.5,47.5)     0
[27.5,33.5)     0
[51.5,58.5)     0
[39.5,47.5)     1
[36.5,39.5)     0
[39.5,47.5)     1
[39.5,47.5)     0
[20,27.5)       0
[39.5,47.5)     0
[51.5,58.5)     0
[51.5,58.5)     0
[51.5,58.5)     0
[27.5,33.5)     0
[58.5,69)       0

现在使用 ggplot 我想在 AgeC 的函数中使用 NbSin2003 生成直方图,并且在任何类别的 AgeC 中我想获得 NbSin2003 对应的平均值 价值观。

例子:

如果我们为 AgeC 学习 [39.5,47.5) 类,我们将有:

AgeC        NbSin2003
[39.5,47.5)     0
[39.5,47.5)     1
[39.5,47.5) 0
[39.5,47.5) 1
[39.5,47.5) 1
[39.5,47.5) 0   
[39.5,47.5) 0

对于此类,直方图的条形长度为 (0+1+0+1+1+0+0)/7=0.42

我用 barplot 和 xtabs 成功地做到了: barplot(xtabs(NbSin2003/sum(NbSin2003)~AgeC,data))

但我想使用 ggplot 来获得更好质量的直方图,并且我已经使用它完成了所有图形。

谢谢大家!

【问题讨论】:

    标签: r ggplot2 statistics


    【解决方案1】:

    不确定我是否理解您的问题。您使用barplot 提供的解决方案并没有按照您所说的去做...(它为“[39.5,47.5)”级别返回“1”,而不是您建议的 0.42)。

    假设您希望条形的高度代表“AgeC”因子中每个级别的平均值,这是一种方法:

    library (dplyr)
    data %>% 
      group_by(AgeC) %>% 
      summarise(avg = sum(NbSin2003) / n()) %>% 
      ggplot(aes(x = AgeC, y = avg)) + geom_bar(stat = "identity")
    

    前两个呼叫按“AgeC”因子中的级别分组,然后计算每个级别的平均值(就像您在示例中所做的那样)。然后将生成的数据通过管道传输到 ggplot。

    【讨论】:

    • 或者只是mean(NbSin2003)。您也可以使用geom_col() 代替geom_bar(stat = "identity")
    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 2011-02-02
    • 1970-01-01
    • 2011-01-25
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    相关资源
    最近更新 更多