r - ggplot 用不同的颜色填充每个标准差

标签 r ggplot2

我一直在网上四处寻找,但找不到如何使用 ggplot 和 stat_function 填充正态分布下的不同部分的明确答案 --> 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")

Plot

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

提前致谢。

最佳答案

要使用 stat_function 获得不同的颜色,您可以使用 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()

enter image description here

关于r - ggplot 用不同的颜色填充每个标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62187066/

相关文章:

r - 当轴离散时,如何微移 geom_text_repel 中线段的起点?

r - 路过。 . .使用 tidyeval 到 `map()`

r - ggplot2:将 p 值添加到分组箱线图

r - 组合ggplot2对象时在拼凑中设置轴限制

r - 动画将图层添加到 ggplot2 图的过程

r - 如何通过显示 geom_point 中的所有三个变量来正确放置此数据中的形状大小?

r - 如何在不创建新值的情况下将新值附加到xts对象

r - 具有成对距离矩阵输出的 colnames 和 rownames

r - 如何使用 data.tables 按附近值进行分组

r - 用不同颜色的线段绘制Y轴线