如何使用ggplot2和lattice在直方图上叠加分布曲线

4

假设我正在使用ggplot2中的facet_grid()来获得两个直方图。现在我想将这些直方图与Poisson曲线叠加(对于两个直方图/网格,具有不同的均值),并且还要添加另一种分布的第二条曲线(我需要手动提供值的概率函数)。如何实现此目的?

构建一个示例:

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包进行操作吗?

2个回答

6

一种简单的方法是绘制密度而不是计数,并使用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的密度转换为“counts”。
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

最近我遇到了一个类似的问题(比较分布),我写了一些代码,用于透明重叠直方图,这可能会给你一些启示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接