我正在尝试使用ggplot2绘制晶格类型数据,然后在样本数据上叠加正态分布以说明基础数据离正态有多远。我想让普通dist位于顶部,以具有与面板相同的均值和stdev。
这是一个例子:
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绘图有问题之外:
在此处输入图片说明
我在这里做错了什么?
慕工程0101907
冉冉说
皈依舞