Superposición de curva normal a histogtwig en R

He logrado encontrar en línea cómo superponer una curva normal a un histogtwig en R, pero me gustaría retener el eje y de “frecuencia” normal de un histogtwig. Vea dos segmentos de código a continuación, y observe cómo en el segundo, el eje y se reemplaza con “densidad”. ¿Cómo puedo mantener ese eje y como “frecuencia”, como lo es en el primer diagtwig?

COMO BONIFICACIÓN: me gustaría marcar también las regiones SD (hasta 3 SD) en la curva de densidad. ¿Cómo puedo hacer esto? Intenté con abline , pero la línea se extiende hasta la parte superior del gráfico y se ve fea.

 g = d$mydata hist(g) 

enter image description here

 g = d$mydata m<-mean(g) std<-sqrt(var(g)) hist(g, density=20, breaks=20, prob=TRUE, xlab="x-variable", ylim=c(0, 2), main="normal curve over histogram") curve(dnorm(x, mean=m, sd=std), col="darkblue", lwd=2, add=TRUE, yaxt="n") 

enter image description here

Vea cómo en la imagen de arriba, el eje y es “densidad”. Me gustaría que eso sea “frecuencia”.

Aquí hay una manera fácil y agradable que encontré:

 h <- hist(g, breaks = 10, density = 10, col = "lightgray", xlab = "Accuracy", main = "Overall") xfit <- seq(min(g), max(g), length = 40) yfit <- dnorm(xfit, mean = mean(g), sd = sd(g)) yfit <- yfit * diff(h$mids[1:2]) * length(g) lines(xfit, yfit, col = "black", lwd = 2) 

Solo necesita encontrar el multiplicador correcto, que se puede calcular fácilmente a partir del objeto hist .

 myhist <- hist(mtcars$mpg) multiplier <- myhist$counts / myhist$density mydensity <- density(mtcars$mpg) mydensity$y <- mydensity$y * multiplier[1] plot(myhist) lines(mydensity) 

enter image description here

Una versión más completa, con una densidad y líneas normales en cada desviación estándar de la media (incluida la media):

 myhist <- hist(mtcars$mpg) multiplier <- myhist$counts / myhist$density mydensity <- density(mtcars$mpg) mydensity$y <- mydensity$y * multiplier[1] plot(myhist) lines(mydensity) myx <- seq(min(mtcars$mpg), max(mtcars$mpg), length.out= 100) mymean <- mean(mtcars$mpg) mysd <- sd(mtcars$mpg) normal <- dnorm(x = myx, mean = mymean, sd = mysd) lines(myx, normal * multiplier[1], col = "blue", lwd = 2) sd_x <- seq(mymean - 3 * mysd, mymean + 3 * mysd, by = mysd) sd_y <- dnorm(x = sd_x, mean = mymean, sd = mysd) * multiplier[1] segments(x0 = sd_x, y0= 0, x1 = sd_x, y1 = sd_y, col = "firebrick4", lwd = 2)