Sto provando a tracciare dati di tipo reticolo con GGPLOT2 e quindi sovrapporre una distribuzione normale sui dati di esempio per illustrare quanto lontano siano normali i dati sottostanti. Mi piacerebbe avere il dist normale in cima per avere la stessa media e stdev del pannello.utilizzando stat_function e facet_wrap insieme in GGPLOT2 in R
Ecco un esempio:
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)
che tutte le opere grandi e produce un bel grafico a tre panel di dati. Come aggiungo il dist normale alla parte superiore? Sembra che io userei stat_function, ma questo non riesce:
#this fails
pg <- ggplot(dd) + geom_density(aes(x=Predicted_value)) + stat_function(fun=dnorm) + facet_wrap(~State_CD)
print(pg)
Sembra che lo stat_function non è sempre insieme con la funzione facet_wrap. Come faccio a far giocare bene questi due?
------------ EDIT ---------
ho cercato di integrare le idee da due delle risposte qui sotto e io sono ancora non c'è:
utilizzando una combinazione di entrambe le risposte che posso incidere insieme questa:
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)
che è davvero vicino ... tranne che qualcosa non va con il normale tracciato dist:
cosa sto facendo di sbagliato qui?
In futuro, la prego di usare nomi di variabili sia con lettere maiuscole e minuscole _oppure_ sottolinea, ma non entrambi. Mi sta uccidendo! – hadley
ok ok, questo è un buon punto. :) –
Ho spostato la mia "risposta" nell'area delle domande. Avrei dovuto metterlo lì per cominciare. Le mie scuse a coloro che hanno fatto commenti in quanto non hanno trasferito. Sarò più riflessivo su come lo faccio in futuro. –