我经常使用核密度图来说明分布.这些在R中创建简单快捷,如下所示:
set.seed(1)
draws <- rnorm(100)^2
dens <- density(draws)
plot(dens)
#or in one line like this: plot(density(rnorm(100)^2))
Run Code Online (Sandbox Code Playgroud)
这给了我这个漂亮的小PDF:
我想将PDF下面的区域从第75百分位到第95百分位.使用quantile函数计算点很容易:
q75 <- quantile(draws, .75)
q95 <- quantile(draws, .95)
Run Code Online (Sandbox Code Playgroud)
但是我如何遮蔽q75和之间的区域q95?
假设例如我想通过十分位数对标准正态分布的密度曲线下面积进行阴影处理.我希望最左边10%的区域对下一个10%有不同的阴影,依此类推.
这是关于" 在两点之间着色核密度图 "和" 按组密度曲线下的ggplot2阴影区域 " 的问题的变体,但我想要对每个分位数进行着色(在我的示例中,每个组都是十分位但是过程应该容易推广到其他分位数).
我不介意解决方案是使用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)
Run Code Online (Sandbox Code Playgroud)
请注意,天真的解决方案ggplot(z.df, aes(x = x, fill = quantile)) + geom_ribbon(aes(ymin = 0, ymax = pdf))会失败,因为Aesthetics can not vary with a ribbon.
使用此数据集,我创建了此图:
我希望在线下阴影geom_smooth,如下:
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
编辑:
@MLavoie评论了一个问题的链接,该问题给了我一个基本的想法,即如何geom_smooth通过使用a来划线predict(loess(AGE ~ SECONDS)).predict()是的geom_smooth,并且loess是使用的方法n …
我已经绘制了一个分布,我想对> 95% 的区域进行着色。但是,当我尝试使用此处记录的不同技术时:ggplot2 按组密度曲线下的阴影区域它不起作用,因为我的数据集的长度不同。
AGG[,1]=seq(1:1000)
AGG[,2]=rnorm(1000,mean=150,sd=10)
Z<-data.frame(AGG)
library(ggplot2)
ggplot(Z,aes(x=Z[,2]))+stat_density(geom="line",colour="lightblue",size=1.1)+xlim(0,350)+ylim(0,0.05)+geom_vline(xintercept=quantile(Z[,2],prob=0.95),colour="red")+geom_text(aes(x=quantile(Z[,2],prob=0.95)),label="VaR 95%",y=0.0225, colour="red")
#I want to add a shaded area right of the VaR in this chart
Run Code Online (Sandbox Code Playgroud) 我正在尝试在两条曲线下阴影区域。我要得到完全相同的地块(无阈值虽然)在以前的帖子,与我想要使用的唯一的区别geom_line(),而不是stat_density()。有什么办法吗?提前致谢。
我已经尝试了该帖子中建议的内容,但使用时不起作用geom_line()。另外,我尝试了一些不同的方法,但这并不是我想要的,因为我想为不同的组使用不同的颜色进行着色。这是初始代码:
library(ggplot2)
x <- seq(0,1,0.005)
y1 <- dbeta(x,3,3)
data1<-data.frame('x'=x,'y'=y1)
data1$group<-1
y2 <- dbeta(x,10,4)
data2<-data.frame('x'=x,'y'=y2)
data2$group<-2
data<-rbind(data1, data2)
ggplot(data, aes(x=x, y=y, group=group, col=group, fill=group)) + geom_line(size=1) +geom_ribbon(data=subset(data,x>0 &x<1),aes(x=x,ymax=y),ymin=0, fill="green4",alpha=0.3)
Run Code Online (Sandbox Code Playgroud)
如果上述链接不起作用:ggplot2阴影曲线下的阴影区域(按组)