【问题标题】:Overlay histogram with kernel density for different data sets on different x-scale不同 x 尺度上不同数据集的核密度叠加直方图
【发布时间】:2018-05-16 09:58:45
【问题描述】:

我的数据的不同子集有两个图:

  1. 数据的一个核估计图 > 0
  2. 数据 == 0 的一个直方图(实际上只有一个 bin)

我想使用 ggplot2 将其组合在一个情节中。

问题是,ggplot 继续为整个 x 轴绘制我的内核线。

values <- c(25.222222, 6.000000, 2.057143, 0.000000, 2.142857, 0.000000, 73.666667, 
            4.081081, 43.133333, 18.937500, 60.822222, 23.379310, 54.954412, 8.492308, 
            67.646250, 15.885000, 38.585859, 46.810606, 31.565152, 39.813889, 
            40.620000, 25.958000, 54.821429, 9.000000, 33.040476, 50.329670, 43.525641, 
            33.508696, 34.265385, 57.003544, 36.690434, 48.074074, 70.372222, 
            77.602564, 29.997436, 71.739683, 11.320000, 2.938776, 10.101562, 35.037956)

df <- data.frame(variable = "TH_part", value=values)

library(ggplot2)

p1.kernel <- ggplot(subset(df, value!=0), aes(x=value, y=..density.., color=variable)) +
  geom_density() + 
  scale_x_continuous(limits = c(0, 200)) + theme_bw()

p1.kernel + 
  geom_histogram(data=subset(df, value==0), 
                 aes(x=value, y=..density.., fill=variable), 
                 breaks=seq(-10,200,by=10), alpha=0.4) + 
  scale_x_continuous(limits = c(-10, 200)) + 
  theme(legend.position="none")

限制范围内的内核图:

内核加直方图但超出限制:

如何在我的 xaxis 上使用不同的限制?

此外,为什么图表不再相关? 如果我看这个:

ggplot(df, aes(x=value, y=..density.., color=variable)) +
  geom_histogram(breaks=seq(0,200,by=10), fill="white") +
  geom_density() + scale_x_continuous(limits = c(0, 200)) + theme_bw()

那么 bar/bin 应该小得多(因为只有开头的一部分是 0)。

额外:使用stat_density(adjust = 0.5) 控制内核平滑因子将在图中为我提供第二个内核。如何在上面的叠加图中使用较小的平滑因子?

编辑:

在 GGamba 的帮助下,我得到了这个图,在 y 轴上计数:

这里,0 条目的 bin 相对于密度要小得多。

【问题讨论】:

    标签: r ggplot2 kernel histogram overlay


    【解决方案1】:

    您需要使用trim 参数。来自?geom_density

    修剪 仅当您在一个图中显示多个密度时,此参数才重要。如果默认为 FALSE,则每个密度都是在整个数据范围内计算的。如果为 TRUE,则在该组的范围内计算每个密度:这通常意味着估计的 x 值不会对齐,因此您将无法堆叠密度值。

    您也可以在geom_density 中使用adjust 参数。

    values <- c(25.222222, 6.000000, 2.057143, 0.000000, 2.142857, 0.000000, 73.666667, 4.081081, 43.133333, 18.937500, 60.822222, 23.379310, 54.954412, 8.492308, 67.646250, 15.885000, 38.585859, 46.810606, 31.565152, 39.813889, 40.620000, 25.958000, 54.821429, 9.000000, 33.040476, 50.329670, 43.525641, 33.508696, 34.265385, 57.003544, 36.690434, 48.074074, 70.372222, 77.602564, 29.997436, 71.739683, 11.320000, 2.938776, 10.101562, 35.037956)
    
    df <- data.frame(variable = "TH_part", value=values)
    
    library(ggplot2)
    
    ggplot(subset(df, value!=0), aes(x=value, y=..density.., color=variable)) +
      geom_density(trim = TRUE, adjust = .5) + 
      geom_histogram(data=subset(df, value==0), 
                     aes(x=value, y=..density.., fill=variable), alpha=0.4, breaks=seq(-10,200,by=10)) + 
      scale_x_continuous(limits = c(-10, 200)) + 
      theme_bw() +
      theme(legend.position="none")
    

    reprex package (v0.2.0) 于 2018 年 5 月 16 日创建。

    【讨论】:

    • 完美,非常感谢!但是我的 0 条目的 bin 怎么会这么高呢?条形不应该比密度小很多吗? (见我上面的编辑和情节)
    猜你喜欢
    • 1970-01-01
    • 2020-06-01
    • 2021-07-18
    • 1970-01-01
    • 2015-12-21
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多