【问题标题】:How to superimpose distribution curves on histograms using ggplot2 and lattice如何使用ggplot2和lattice在直方图上叠加分布曲线
【发布时间】:2023-10-14 11:12:01
【问题描述】:

说,我在 ggplot2 中使用 facet_grid() 来获得 2 个直方图。现在我想将这些直方图与泊松曲线(2 个直方图/网格具有不同的平均值)和另一个分布的第二条曲线(我想手动提供值的概率函数)叠加。如何才能做到这一点?

构造一个例子:

library(ggplot2)

value<-c(rpois(500,1.5))

group<-rep(c("A","B"),250)

data<-data.frame(value,group)

g1<-ggplot(data,aes(value))

g1+geom_histogram(aes(y=..count..),binwidth=1,position="identity")+facet_grid(.~group)

接下来呢?

或者,可以使用 lattice 包来完成吗?

【问题讨论】:

    标签: r ggplot2 lattice


    【解决方案1】:

    简单的方法是绘制密度而不是计数并使用 stat_function()

    library(ggplot2)
    value<-c(rpois(500,1.5))
    group<-rep(c("A","B"),250)
    data<-data.frame(value,group)
    ggplot(data,aes(value)) + 
            geom_histogram(aes(y=..density..), binwidth=1,position="identity") + 
            facet_grid(.~group) + 
            stat_function(geom = "line", fun = dpois, arg = list(lambda = 1.5), colour = "red", fill = NA, n = 9)
    

    如果您想要计数,则需要将 dpois 的密度转换为“计数”

    ggplot(data,aes(value)) + 
            geom_histogram(aes(y=..count..), binwidth=1,position="identity") + 
            facet_grid(.~group) + 
            stat_function(geom = "line", fun = function(..., total){dpois(...) * total}, arg = list(lambda = 1.5, total = 250), colour = "red", fill = NA, n = 9)
    

    【讨论】:

      【解决方案2】:

      最近遇到类似问题(比较分布)时,我为transparent overlapping histograms 编写了一些代码,可能会给您一些关于从哪里开始的想法。

      【讨论】:

        最近更新 更多