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