Histograma de sobreposição com curva de densidade

Eu estou tentando fazer um histograma de valores de densidade e sobrepor isso com a curva de uma function de densidade (não a estimativa de densidade).

Usando um exemplo normal padrão simples, aqui estão alguns dados:

x <- rnorm(1000) 

Eu posso fazer:

 q <- qplot( x, geom="histogram") q + stat_function( fun = dnorm ) 

mas isso dá a escala do histograma em freqüências e não em densidades. com ..density.. Eu posso obter a escala adequada no histograma:

 q <- qplot( x,..density.., geom="histogram") q 

Mas agora isso dá um erro:

 q + stat_function( fun = dnorm ) 

Existe algo que não estou vendo?

Outra questão, existe uma maneira de traçar a curva de uma function, como curve() , mas não como layer?

Aqui está!

 # create some data to work with x = rnorm(1000); # overlay histogram, empirical density and normal density p0 = qplot(x, geom = 'blank') + geom_line(aes(y = ..density.., colour = 'Empirical'), stat = 'density') + stat_function(fun = dnorm, aes(colour = 'Normal')) + geom_histogram(aes(y = ..density..), alpha = 0.4) + scale_colour_manual(name = 'Density', values = c('red', 'blue')) + theme(legend.position = c(0.85, 0.85)) print(p0) 

Uma alternativa mais básica à resposta de Ramnath, passando a média e o desvio padrão observados e usando ggplot vez de qplot :

 df <- data.frame(x = rnorm(1000, 2, 2)) # overlay histogram and normal density ggplot(df, aes(x)) + geom_histogram(aes(y = stat(density))) + stat_function( fun = dnorm, args = list(mean = mean(df$x), sd = sd(df$x)), lwd = 2, col = 'red' ) 

insira a descrição da imagem aqui