2010-08-11 18 views
4

Dites, j'utilise facet_grid() dans ggplot2 pour obtenir 2 histogrammes. Maintenant, je veux superposer ces histogrammes avec des courbes de Poisson (ayant des moyennes différentes pour les 2 histogrammes/grilles) et une deuxième courbe d'une autre distribution (pour laquelle je veux fournir manuellement la fonction de probabilité des valeurs). Comment cela peut-il être fait?Comment superposer des courbes de distribution sur des histogrammes à l'aide de ggplot2 et de lattice

Construire un exemple:

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) 

Et ensuite?

Alternativement, peut-il être fait en utilisant le paquet de treillis?

Répondre

6

Le moyen facile est de tracer des densités au lieu de comptages et l'utilisation 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) 

Si vous voulez compte alors vous devez convertir les densités de dpois à « compte »

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)