[r] 在两点之间着色内核密度图。


Answers

另一种解决方

dd <- with(dens,data.frame(x,y))
library(ggplot2)
qplot(x,y,data=dd,geom="line")+
  geom_ribbon(data=subset(dd,x>q75 & x<q95),aes(ymax=y),ymin=0,
              fill="red",colour=NA,alpha=0.5)

结果:

Question

我经常使用核心密度图来说明分布。 这些在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:

我希望将PDF下的区域从第75百分位降至第95百分位。 使用quantile函数计算点很容易:

q75 <- quantile(draws, .75)
q95 <- quantile(draws, .95)

但是,如何遮蔽q75q95之间的区域?




这个问题需要lattice答案。 这是一个非常基本的方法,只需调整Dirk和其他人使用的方法即可:

#Set up the data
set.seed(1)
draws <- rnorm(100)^2
dens <- density(draws)

#Put in a simple data frame   
d <- data.frame(x = dens$x, y = dens$y)

#Define a custom panel function;
# Options like color don't need to be hard coded    
shadePanel <- function(x,y,shadeLims){
    panel.lines(x,y)
    m1 <- min(which(x >= shadeLims[1]))
    m2 <- max(which(x <= shadeLims[2]))
    tmp <- data.frame(x1 = x[c(m1,m1:m2,m2)], y1 = c(0,y[m1:m2],0))
    panel.polygon(tmp$x1,tmp$y1,col = "blue")
}

#Plot
xyplot(y~x,data = d, panel = shadePanel, shadeLims = c(1,3))




Links



Tags

r r   plot