我已经绘制了一个分布,我想遮蔽面积> 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
但是由于您希望线条的颜色为浅蓝色等,因此您需要操作对象
p
。在这方面,另见 this 和 this 问题。对象
p
包含四层: geom_line
、 geom_ribbon
、 geom_vline
和 geom_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 中密度曲线下的阴影区域,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48212824/