【问题标题】:Overlay KDE and filled histogram with ggplot2 (R)用 ggplot2 (R) 覆盖 KDE 和填充直方图
【发布时间】:2021-09-06 08:32:10
【问题描述】:

我是 R 的新手,我正在努力覆盖一个分为 6 个类的填充直方图和一个基于整个分布的 KDE(不是 6 个类的单个分布)。 我有这个包含 4 列(data1、data2、data3、origin)的数据集,所有数据都是连续的,origin 是我的类别(地理位置)。我可以用 6 个类绘制 data1 的直方图,但是当我添加 KDE 曲线时,它也分为 6 条曲线(每个类一个)。我想我明白当我调用 geom_density 时我必须覆盖第一个 aes 参数并创建一个新参数,但我找不到这样做的方法。

用 iris 数据集翻译我的问题,我想要 Sepal.Length 的 KDE 曲线,而不是每个物种的 KDE 曲线 Sepal.Length。这是我的代码和虹膜数据的结果。

ggplot(data=iris, aes(x=Sepal.Length, fill=Species)) + geom_histogram() + theme_minimal() + geom_density(kernel="gaussian", bw= 0.1, alpha=.3)

Example with Iris dataset

感谢您的帮助。

【问题讨论】:

    标签: r ggplot2 histogram kde kernel-density


    【解决方案1】:

    问题是直方图显示计数,它集成到总和,而密度图显示密度,集成到 1。要使两者兼容,您必须使用“计算变量”层的统计部分,可通过after_stat() 访问。您可以缩放密度以使其积分为总和,也可以缩放直方图以使其积分为 1。

    将直方图缩放到密度:

    library(ggplot2)
    ggplot(iris, aes(Sepal.Length, fill = Species)) +
      geom_histogram(aes(y = after_stat(density)),
                     position = 'identity') +
      geom_density(bw = 0.1, alpha = 0.3)
    #> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
    

    将密度缩放为计数。要正确执行此操作,您应该将 count 计算变量与直方图的 binwidth 参数相乘。

    ggplot(iris, aes(Sepal.Length, fill = Species)) +
      geom_histogram(binwidth = 0.2, position = 'identity') +
      geom_density(aes(y = after_stat(count * 0.2)),
                   bw = 0.1, alpha = 0.3)
    

    reprex package (v1.0.0) 于 2021 年 6 月 22 日创建

    作为旁注;直方图的默认位置参数是将条形堆叠在另一个之上。设置 position = "identity" 可以防止这种情况。或者,您也可以在密度层中设置position = "stack"

    编辑:抱歉,我似乎已经掩盖了“我想要 1 个 KDE 用于整个 Sepal.Length”这个问题的一部分。您必须手动设置组,如下所示:

    ggplot(iris, aes(Sepal.Length, fill = Species)) +
      geom_histogram(binwidth = 0.2) +
      geom_density(bw = 0.1, alpha = 0.3, 
                   aes(group = 1, y = after_stat(count * 0.2)))
    

    【讨论】:

    • 我已经尝试过您在直方图上获得 1 KDE 的解决方案,它工作正常!我期待稍后纠正缩放问题,但您为我提供了完整的解决方案。非常感谢您的详细解答。
    猜你喜欢
    • 2011-10-20
    • 2018-08-02
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2021-11-29
    相关资源
    最近更新 更多