我已经绘制了一个分布,我想遮蔽面积> 95%。
但是,当我尝试使用此处记录的不同技术时: ggplot2 shade area under density curve by group 它不起作用,因为我的数据集长度不同。

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

最佳答案

这是使用函数 WVPlots::ShadedDensity 的解决方案。我将使用这个函数,因为它的参数是不言自明的,因此可以很容易地创建绘图。不利的一面是,定制有点棘手。但是,一旦您仔细研究了 ggplot 对象,您就会发现它并没有那么神秘。

library(WVPlots)

# create the data
set.seed(1)
V1 = seq(1:1000)
V2 = rnorm(1000, mean = 150, sd = 10)
Z <- data.frame(V1, V2)

现在你可以创建你的情节了。
threshold <- quantile(Z[, 2], prob = 0.95)[[1]]
p <- WVPlots::ShadedDensity(frame = Z,
                            xvar = "V2",
                            threshold = threshold,
                            title = "Your title",
                            tail = "right")
p

r - ggplot2 中密度曲线下的阴影区域-LMLPHP

但是由于您希望线条的颜色为浅蓝色等,因此您需要操作对象 p 。在这方面,另见 thisthis 问题。

对象 p 包含四层: geom_linegeom_ribbongeom_vlinegeom_text 。您可以在这里找到它们: p$layers

现在您需要更改它们的美学映射。对于 geom_line 只有一个,即 colour
p$layers[[1]]$aes_params
$colour
[1] "darkgray"

如果您现在想将线条颜色更改为浅蓝色,只需像这样覆盖现有颜色
p$layers[[1]]$aes_params$colour <- "lightblue"

一旦你想出如何为一个 layer 做到这一点,剩下的就很简单了。
p$layers[[2]]$aes_params$fill <- "grey"     #geom_ribbon
p$layers[[3]]$aes_params$colour <- "red"    #geom_vline
p$layers[[4]]$aes_params$label <- "VaR 95%" #geom_text

p

情节现在看起来像这样

r - ggplot2 中密度曲线下的阴影区域-LMLPHP

关于r - ggplot2 中密度曲线下的阴影区域,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48212824/

10-09 08:55