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

标签 r ggplot2

假设例如我想将标准正态分布的密度曲线下方的面积着色为十分。我希望最左边 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/

相关文章:

r - 在 R 中存储/保存预测模型

r - ggplot2如何使散点图上的水平和垂直误差条具有相同大小且具有不同比例的轴

r - 如何在ggplot2中设置固定的连续颜色值

R:带有矢量模式的 agrep

r - 如何在 ggplot2 R 图中设置轴的限制?

java - RCaller、线程处理和 Java GUI

r - 绘制具有置信区间的回归系数

r - 如何更改 R 中空白的千位分隔符?

r - qplot可以不用中间列直接显示百分比吗?

r - 当其他系列完全丢失时,使用 ggplot 调整闪避条形图的宽度