gpt4 book ai didi

r - 在 R 中的 ggplot2 中一起使用 stat_function 和 facet_wrap

转载 作者:行者123 更新时间:2023-12-03 11:35:45 24 4
gpt4 key购买 nike

我试图用 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绘图有问题:

enter image description here

我在这里做错了什么?

最佳答案

stat_function旨在在每个面板中覆盖相同的功能。 (没有明显的方法可以将函数的参数与不同的面板相匹配)。

正如伊恩建议的那样,最好的方法是自己生成法线曲线,并将它们绘制为单独的数据集(这是您之前出错的地方 - 合并对于此示例没有意义,如果您仔细观察,您会明白这就是为什么你会得到奇怪的锯齿图案)。

这是我解决问题的方法:

dd <- data.frame(
predicted = rnorm(72, mean = 2, sd = 2),
state = rep(c("A", "B", "C"), each = 24)
)

grid <- with(dd, seq(min(predicted), max(predicted), length = 100))
normaldens <- ddply(dd, "state", function(df) {
data.frame(
predicted = grid,
density = dnorm(grid, mean(df$predicted), sd(df$predicted))
)
})

ggplot(dd, aes(predicted)) +
geom_density() +
geom_line(aes(y = density), data = normaldens, colour = "red") +
facet_wrap(~ state)

enter image description here

关于r - 在 R 中的 ggplot2 中一起使用 stat_function 和 facet_wrap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1376967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com