ggplot2:覆盖密度曲线的直方图

我正在尝试ggplot2,我遇到了一些问题。 我想要做的是做一个密度值的直方图,并用密度函数(而不是密度估计)曲线覆盖。

使用一个简单的标准正常例子,这里是一些数据:

x <- rnorm(1000) 

我可以:

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

但是这给出了频率而不是密度的直方图的比例。 与..density..我可以得到适当的规模的直方图:

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

但现在这给了一个错误:

 q + stat_function( fun = dnorm ) 

有没有我没有看到的东西?

另一个问题,有没有办法绘制一个函数的曲线,如curve() ,但不是作为层?

干得好!

 # 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) 

Ramnath的答案是一个更简单的select,通过观察平均值和标准差,并使用ggplot代替qplot

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

在这里输入图像描述