2011-08-24 41 views
9

Tengo una pregunta probablemente similar a Fitting a density curve to a histogram in R. Usando qplot he creado 7 histogramas con este comando:Cómo agregar la curva gaussiana al histograma creado con qplot?

Para cada rebanada, me gustaría añadir una curva de Gauss apropiado. Cuando trato de utilizar lines() método, me sale error:

Error in plot.xy(xy.coords(x, y), type = type, ...) : 
plot.new has not been called yet 

¿Cuál es el comando para hacerlo correctamente?

+1

no se pueden mezclar las funciones de gráficos de bases ('líneas()' etc) con gráfico reticulado como el usado por la gpplot2 ** ** ** y ** celosía paquetes. –

Respuesta

14

¿Has probado stat_function?

+ stat_function(fun = dnorm) 

es probable que desee para trazar los histogramas utilizando aes(y = ..density..) con el fin de representar los valores de densidad en lugar de los conteos.

Se puede encontrar mucha información útil en la pregunta this, que incluye algunos consejos sobre el trazado de diferentes curvas normales en diferentes facetas.

He aquí algunos ejemplos:

dat <- data.frame(x = c(rnorm(100),rnorm(100,2,0.5)), 
        a = rep(letters[1:2],each = 100)) 

de superposición una sola densidad normal sobre cada faceta:

ggplot(data = dat,aes(x = x)) + 
    facet_wrap(~a) + 
    geom_histogram(aes(y = ..density..)) + 
    stat_function(fun = dnorm, colour = "red") 

enter image description here

partir de la pregunta I ligado a, crear una trama de datos independiente con las diferentes curvas normales:

grid <- with(dat, seq(min(x), max(x), length = 100)) 
normaldens <- ddply(dat, "a", function(df) { 
    data.frame( 
    predicted = grid, 
    density = dnorm(grid, mean(df$x), sd(df$x)) 
) 
}) 

y la trama ellos por separado utilizando geom_line:

ggplot(data = dat,aes(x = x)) + 
    facet_wrap(~a) + 
    geom_histogram(aes(y = ..density..)) + 
    geom_line(data = normaldens, aes(x = predicted, y = density), colour = "red") 

enter image description here

+0

soy muy principiante en R, solo tómalo por unos días. Voy a echarle un vistazo, gracias por la pista! – mkk

+0

Muito Bom! Me ajudou horrores !!!! – Jean

5

ggplot2 utiliza un paradigma de diferentes gráficos que los gráficos de base. (Aunque puede utilizar grid gráficos con ella, la mejor forma es añadir una nueva capa stat_function a la trama. El código ggplot2 es la siguiente.

Tenga en cuenta que no pude conseguir que esto funcione utilizando qplot, pero el transición a ggplot es razonablemente lisa y llana, la diferencia más importante es que los datos deben estar en formato hoja.de.datos

también tenga en cuenta la asignación explícita de la estética y aes=aes(y=..density..)) -. esto es ligeramente inusual, pero toma los resultados y stat_function lo asigna a los datos:

library(ggplot2) 
data <- data.frame(V1 <- rnorm(700), V2=sample(LETTERS[1:7], 700, replace=TRUE)) 
ggplot(data, aes(x=V1)) + 
    stat_bin(aes(y=..density..)) + 
    stat_function(fun=dnorm) + 
    facet_grid(V2~.) 

enter image description here

Cuestiones relacionadas