说,我在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)
下一步是什么?
或者,可以使用晶格包完成吗?
答案 0 :(得分: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的密度转换为'计数'
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)
答案 1 :(得分:2)
当最近遇到类似的问题(比较发行版)时,我写了一些transparent overlapping histograms的代码,可能会给你一些关于从哪里开始的想法。