Estoy tratando de graficar datos de tipo celosía con GGPLOT2 y luego superponer una distribución normal sobre los datos de muestra para ilustrar qué tan fuera de lo normal son los datos subyacentes. Me gustaría tener el dist normal encima para tener la misma media y stdev que el panel.usando stat_function y facet_wrap juntos en GGPLOT2 en R
He aquí un ejemplo:
library(ggplot2)
#make some example data
dd<-data.frame(matrix(rnorm(144, mean=2, sd=2),72,2),c(rep("A",24),rep("B",24),rep("C",24)))
colnames(dd) <- c("x_value", "Predicted_value", "State_CD")
#This works
pg <- ggplot(dd) + geom_density(aes(x=Predicted_value)) + facet_wrap(~State_CD)
print(pg)
que todas las obras grandes y produce un gráfico agradable de tres paneles de los datos. ¿Cómo agrego el dist normal en la parte superior? Parece que yo usaría stat_function, pero esto no funciona:
#this fails
pg <- ggplot(dd) + geom_density(aes(x=Predicted_value)) + stat_function(fun=dnorm) + facet_wrap(~State_CD)
print(pg)
Parece ser que el stat_function no se lleva bien con la función de facet_wrap. ¿Cómo logro que estos dos jueguen bien?
------------ EDITAR ---------
traté de integrar las ideas de dos de las respuestas a continuación y estoy todavía no existe:
utilizando una combinación de las dos respuestas que puedo hackear esto:
library(ggplot)
library(plyr)
#make some example data
dd<-data.frame(matrix(rnorm(108, mean=2, sd=2),36,2),c(rep("A",24),rep("B",24),rep("C",24)))
colnames(dd) <- c("x_value", "Predicted_value", "State_CD")
DevMeanSt <- ddply(dd, c("State_CD"), function(df)mean(df$Predicted_value))
colnames(DevMeanSt) <- c("State_CD", "mean")
DevSdSt <- ddply(dd, c("State_CD"), function(df)sd(df$Predicted_value))
colnames(DevSdSt) <- c("State_CD", "sd")
DevStatsSt <- merge(DevMeanSt, DevSdSt)
pg <- ggplot(dd, aes(x=Predicted_value))
pg <- pg + geom_density()
pg <- pg + stat_function(fun=dnorm, colour='red', args=list(mean=DevStatsSt$mean, sd=DevStatsSt$sd))
pg <- pg + facet_wrap(~State_CD)
print(pg)
el cual está muy cerca ... excepto algo está mal con el trazado normal de dist:
¿Qué estoy haciendo mal aquí?
En el futuro, ¿podría utilizar nombres de variables con cualquiera de los casos mixtos _o_ pone de relieve, pero no ambos. ¡Me está matando! – hadley
ok ok, ese es un buen punto. :) –
Moví mi "respuesta" al área de preguntas. Debería haberlo puesto allí para comenzar. Mis disculpas a quienes hicieron comentarios porque no se transfirieron. Seré más considerado acerca de cómo hago eso en el futuro. –