【问题标题】:Programatically scale density curve made with geom_density to similar height to geom_histogram?以编程方式将使用 geom_density 制作的密度曲线缩放到与 geom_histogram 相似的高度?
【发布时间】:2020-04-13 16:23:13
【问题描述】:

假设我们做一个直方图

set.seed(123)
x = rnorm(1000)
qplot(x, geom = 'blank') +
geom_histogram()

我们添加了一条密度线

qplot(x, geom = 'blank') +
geom_histogram() +
geom_density() 

密度线太低了,很难看到,所以可以是scaled to match the height of the histogram

qplot(x, geom = 'blank') +
  geom_histogram(bins = 30) +
  geom_density(aes(y=0.22 * ..count..)) 

问题

当不使用binwidth 参数到geom_histogram 时(即使用bins 参数时),我们如何以编程方式调整密度线。

所需的输出是一个geom_histogram(bins = ...),具有明显缩放的密度线,依赖于乘数/硬编码的任何手动计算。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    是的,您可以事先指定垃圾箱的数量。这仅仅是因为层可以共享数据,但不能共享计算的参数。 IE。密度层不知道直方图层中的bins/binwidth参数。以下需要ggplot2 v3.3.0。

    nbins <- 30
    qplot(x, geom = 'blank') +
      geom_histogram(bins = nbins) +
      geom_density(aes(y = stage(nbins, after_stat = count * diff(range(x))/nbins))) 
    

    【讨论】:

    • 除了你的回答,一个观察,我认为 geom_density 总是有延伸到range(x) 之外的尾巴。因此乘以一个标量(例如 1.1)可以使密度线更符合条形(假设这是可取的),即geom_density(aes(y = stage(nbins, after_stat = count * diff(1.1 * range(x))/nbins)))
    • 您可以使用stage(nbins, after_stat = count * diff(rangex &lt;&lt;- range(x))/nbins) 进行测试。对我来说,rangex == range(x) 是真的。
    【解决方案2】:

    您可以使用密度估计而不是计数。现在可以通过after_stat 轻松访问它。也可以看看ndensity 选项——也许这就是你要找的?

    library(ggplot2)
    library(patchwork)
    
    set.seed(123)
    x = rnorm(1000)
    
    # Example of kernel density estimate usage
    den <- qplot(x, geom = 'blank') +
      geom_histogram(aes(y= after_stat(density))) +
      geom_density() +
      ggtitle("Density estimate")
    
    # Example of kernel density estimate usage, scale to a maximum of 1
    nden <- qplot(x, geom = 'blank') +
      geom_histogram(aes(y= after_stat(ndensity))) +
      geom_density(aes(y= after_stat(ndensity))) +
      ggtitle("Density estimate, scaled to 1")
    
    # Plot
    den | nden
    

    【讨论】:

      猜你喜欢
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多