我经常使用内核密度图来说明分布。可以像这样在R中轻松快速地创建它们:

set.seed(1)
draws <- rnorm(100)^2
dens <- density(draws)
plot(dens)
#or in one line like this: plot(density(rnorm(100)^2))

这给了我这个漂亮的小PDF:

r - 在两点之间对内核密度图进行阴影处理。-LMLPHP

我想将PDF下的区域的阴影从第75个百分位数增加到第95个百分位数。使用quantile函数很容易计算点:
q75 <- quantile(draws, .75)
q95 <- quantile(draws, .95)

但是,如何为q75q95之间的区域着色呢?

最佳答案

使用polygon()函数,请参见其帮助页面,我相信这里也有类似的问题。

您需要找到分位数的索引才能获得实际的(x,y)对。

编辑:在这里你去:

x1 <- min(which(dens$x >= q75))
x2 <- max(which(dens$x <  q95))
with(dens, polygon(x=c(x[c(x1,x1:x2,x2)]), y= c(0, y[x1:x2], 0), col="gray"))

输出(由JDL添加)

r - 在两点之间对内核密度图进行阴影处理。-LMLPHP

08-27 20:43