R ggplot用不同的颜色填充每个标准偏差

R ggplot用不同的颜色填充每个标准偏差,r,ggplot2,R,Ggplot2,我一直在网上四处寻找,我找不到一个明确的答案,如何使用ggplot和stat_函数-->dnorm填充正态分布下的不同部分 #Parameters mu = 18.7 sigma = 36.4 n = 168 x = c(mu - 4*sigma/sqrt(n), mu + 4*sigma/sqrt(n)) 这是我对情节的看法 ggplot(data, aes(x)) + stat_function(fun = dnorm, args = list(

我一直在网上四处寻找,我找不到一个明确的答案,如何使用ggplot和stat_函数-->dnorm填充正态分布下的不同部分

#Parameters 

mu = 18.7
sigma = 36.4
n = 168
x = c(mu - 4*sigma/sqrt(n), mu + 4*sigma/sqrt(n))

这是我对情节的看法

ggplot(data, aes(x)) + 
  stat_function(fun = dnorm,
                args = list(mean = mu, sd = sigma/sqrt(n)), 
                geom = "area", 
                fill = "steelblue")

我想要的是填充第一个标准偏差一种颜色,第二个标准偏差另一种颜色,依此类推。 我还注意到曲线看起来并不平滑。有什么原因吗


提前感谢。

要使用
stat\u函数获得不同的颜色,您可以使用
xlim
参数,例如

ggplot(data.frame(x), aes(x)) + 
  stat_function(fun = dnorm,
                args = list(mean = mu, sd = sigma/sqrt(n)), 
                geom = "area", 
                fill = "steelblue", n = 1001) +
    stat_function(fun = dnorm,
                args = list(mean = mu, sd = sigma/sqrt(n)), 
                geom = "area", 
                fill = "chartreuse", n = 1001, xlim = c(mu - sigma / sqrt(n), mu)) 
这可能会变得单调乏味,因此如果您希望每个标准偏差都不同,那么生成函数数据并直接使用
geom_area
会更简单:

sim_dat = data.frame(x = seq(x[1], x[2], length.out = 1001))
sim_dat$y = dnorm(sim_dat$x, mean = mu, sd = sigma / sqrt(n))
sim_dat$sds = cut(sim_dat$x, breaks = c(-Inf, mu + sigma / sqrt(n) * (-3:3), Inf), labels = setdiff(-4:4, 0))

ggplot(sim_dat, aes(x, y, fill = sds)) + geom_area()

关于“曲线不平滑”-
stat\u函数
有一个参数
n
用于确定曲线上要使用的点的数量。它的默认值是101。可以使用更高的
n
值使曲线更平滑。用不同的颜色填充不同的区域表明这些区域必须不同。尽管听起来很疯狂,但要意识到上面的代码只生成了一个区域。顺便说一句,请测试您发布到问题的代码。在本例中,
错误:您将函数作为全局数据传递,因为您建议
数据
是一个
数据.frame
对象,而对我们其他人来说,它是
utils::data
函数。我完全忘记了数据代码的数据帧部分,抱歉!