我正在尝试用 ggplot2 绘制格型数据,然后在样本数据上叠加一个正态分布,以说明基础数据的正常程度。我希望顶部的普通 dist 具有与面板相同的均值和标准差。
这是一个例子:
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)
这一切都很好,并产生了一个很好的数据三面板图。如何在顶部添加正常的 dist?看来我会使用 stat_function,但这失败了:
#this fails
pg <- ggplot(dd) + geom_density(aes(x=Predicted_value)) + stat_function(fun=dnorm) + facet_wrap(~State_CD)
print(pg)
stat_function 似乎与 facet_wrap 功能不兼容。我怎样才能让这两个玩得很好?
- - - - - - 编辑 - - - - -
我试图整合以下两个答案的想法,但我仍然不在那里:
结合使用这两个答案,我可以将其破解:
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)
这真的很接近......除了正常的 dist 绘图有问题:
我在这里做错了什么?