【发布时间】:2014-11-28 13:13:08
【问题描述】:
假设例如我想用 decile 对标准正态分布的密度曲线下的区域进行着色。我希望该区域最左边的 10% 具有与下一个 10% 不同的阴影,依此类推。
这是问题“Shading a kernel density plot between two points”和“ggplot2 shade area under density curve by group”的变体,但我想对每个分位数进行着色(在我的示例中,每个组都是等分位数,但过程应该很容易推广到其他分位数)。
我不介意解决方案是使用ggplot2 还是base 图形,以及这是直接从公式(这将非常简洁)还是基于首先制作数据框来完成。如果是后者,您可能需要:
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。
【问题讨论】: