gpt4 book ai didi

r - 密度曲线下的阴影(填充或颜色)面积(按分位数)

转载 作者:行者123 更新时间:2023-12-02 20:45:59 28 4
gpt4 key购买 nike

假设例如我想将标准正态分布的密度曲线下方的面积着色为十分。我希望最左边 10% 的区域具有与接下来的 10% 不同的阴影,依此类推。

这是问题“Shading a kernel density plot between two points”和“ggplot2 shade area under density curve by group”的变体,但我想对每个分位数进行着色(在我的示例中,每个组都是十分位数,但过程应该很容易推广到其他分位数)。

我不介意解决方案是否使用 ggplot2base图形,以及这是直接从公式完成的(这真的很简洁)还是基于首先制作数据框。如果是后者,您可能需要:

delta <- 0.0001 
z.df <- data.frame(x = seq(from=-3, to=3, by=delta))
z.df$pdf <- dnorm(z.df$x)
z.df$decile <- floor(10*pnorm(z.df$x) + 1)

请注意,简单的解决方案 ggplot(z.df, aes(x = x, fill = quantile)) + geom_ribbon(aes(ymin = 0, ymax = pdf))会失败,因为 Aesthetics can not vary with a ribbon .

最佳答案

实际上,美学可以随 geom_ribbon(...) 的变化而变化。 (或者 geom_area(...) ,这基本上是一样的),只要你设置 group审美也是如此。

delta     <- 0.001 
quantiles <- 10
z.df <- data.frame(x = seq(from=-3, to=3, by=delta))
z.df$pdf <- dnorm(z.df$x)
z.df$qt <- cut(pnorm(z.df$x),breaks=quantiles,labels=F)

library(ggplot2)
ggplot(z.df,aes(x=x,y=pdf))+
geom_area(aes(x=x,y=pdf,group=qt,fill=qt),color="black")+
scale_fill_gradient2(midpoint=median(unique(z.df$qt)), guide="none") +
theme_bw()

设置quantiles <- 20一开始会产生这样的结果:

关于r - 密度曲线下的阴影(填充或颜色)面积(按分位数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27189453/

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