Zostało odpowiedział here i częściowo here.
Jeśli chcesz, aby oś Y miała zliczenia częstotliwości, wówczas normalna krzywa musi zostać przeskalowana zgodnie z liczbą obserwacji i pojemnością binarki.
# 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
albo, bardziej elastyczne podejście pozwala na wykorzystanie ścianek i opiera podejścia wymienionych here utworzyć oddzielny zbiór danych zawierający dane normalne krzywe i nałożyć te.
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)
check to odpowiedź na moje pytanie powiązanym, gdzie pisałem rodzajowe funkcji nałożyć histogram na działce gęstości. http://stackoverflow.com/questions/6847450/r-how-to-plot-gumbel-distribution-using-ggplot2s-stat-function/6848958#6848958 – Ramnath
Ale ta funkcja wymaga wartości gęstości na osi Y, prawda? Chcę mieć tam swoją częstotliwość! Nie chcę wykresu gęstości, ale prostej krzywej normalnej. – Bloomy
, ale krzywa normalna ma gęstości. więc jestem zdezorientowany. chcesz normalną krzywą z licznością częstotliwości? – Ramnath