这已经回答了here和部分here。
如果你想Y轴有频率计数,那么正常曲线需要根据观测值的数量和binwidth进行缩放。
# Simulate some data. Individuals' heights in cm.
n <- 1000
mean <- 165
sd <- 6.6
binwidth <- 2
height <- rnorm(n, mean, sd)
qplot(height, geom = "histogram", breaks = seq(130, 200, binwidth),
colour = I("black"), fill = I("white"),
xlab = "Height (cm)", ylab = "Count") +
# Create normal curve, adjusting for number of observations and binwidth
stat_function(
fun = function(x, mean, sd, n, bw){
dnorm(x = x, mean = mean, sd = sd) * n * bw
},
args = c(mean = mean, sd = sd, n = n, bw = binwidth))

EDIT
或者,对于更灵活的方法,允许使用小面的并且在列出here的方法绘制,创建包含该数据用于正常曲线的单独的数据集和覆盖这些。
library(plyr)
dd <- data.frame(
predicted = rnorm(720, mean = 2, sd = 2),
state = rep(c("A", "B", "C"), each = 240)
)
binwidth <- 0.5
grid <- with(dd, seq(min(predicted), max(predicted), length = 100))
normaldens <- ddply(dd, "state", function(df) {
data.frame(
predicted = grid,
normal_curve = dnorm(grid, mean(df$predicted), sd(df$predicted)) * length(df$predicted) * binwidth
)
})
ggplot(dd, aes(predicted)) +
geom_histogram(breaks = seq(-3,10, binwidth), colour = "black", fill = "white") +
geom_line(aes(y = normal_curve), data = normaldens, colour = "red") +
facet_wrap(~ state)
检查上一个相关的问题,在这里我已经写了一个泛型函数叠加在密度图直方图这个答案我的。 http://stackoverflow.com/questions/6847450/r-how-to-plot-gumbel-distribution-using-ggplot2s-stat-function/6848958#6848958 – Ramnath
但是,该功能需要在Y轴上的密度值,对吧?我希望保持我的频率计数!我不想要一个密度图,而是一个简单的正态曲线。 – Bloomy
但正常曲线有密度。所以我很困惑。你想要一个具有频率计数的正态曲线吗? – Ramnath