studio - superponer graficas en r ggplot
Histograma de superposiciĆ³n con curva de densidad (2)
Estoy tratando de hacer un histograma de valores de densidad y superponerlo con la curva de una función de densidad (no la estimación de densidad).
Usando un ejemplo normal estándar simple, aquí hay algunos datos:
x <- rnorm(1000)
Puedo hacer:
q <- qplot( x, geom="histogram")
q + stat_function( fun = dnorm )
pero esto da la escala del histograma en frecuencias y no en densidades. con ..density..
puedo obtener la escala correcta en el histograma:
q <- qplot( x,..density.., geom="histogram")
q
Pero ahora esto da un error:
q + stat_function( fun = dnorm )
¿Hay algo que no estoy viendo?
Otra pregunta, ¿hay alguna manera de trazar la curva de una función, como curve()
, pero luego no como layer?
¡Aqui tienes!
# 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)
Una alternativa más escueta a la respuesta de Ramnath, pasando la media observada y la desviación estándar, y usando ggplot
lugar de qplot
:
df <- data.frame(x = rnorm(1000, 2, 2))
# overlay histogram and normal density
ggplot(df, aes(x)) +
geom_histogram(aes(y = stat(density))) +
stat_function(
fun = dnorm,
args = list(mean = mean(df$x), sd = sd(df$x)),
lwd = 2,
col = ''red''
)