【发布时间】:2010-11-25 12:09:00
【问题描述】:
我正在尝试使用 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 绘图有问题:
我在这里做错了什么?
【问题讨论】:
-
以后,您能否使用混合大小写的 或 下划线的变量名,但不能同时使用两者。它要了我的命!
-
好的,这很好。 :)
-
我将“答案”移到了问题区域。我应该把它放在那里开始。我向那些制作 cmets 的人道歉,因为他们没有转移。以后我会更加深思熟虑如何做到这一点。