Here is a solution using the function WVPlots::ShadedDensity
. I will use this function because its arguments are self-explanatory and therefore the plot can be created very easily. On the downside, the customization is a bit tricky. But once you worked your head around a ggplot
object, you'll see that it is not that mysterious.
library(WVPlots)
# create the data
set.seed(1)
V1 = seq(1:1000)
V2 = rnorm(1000, mean = 150, sd = 10)
Z <- data.frame(V1, V2)
Now you can create your plot.
threshold <- quantile(Z[, 2], prob = 0.95)[[1]]
p <- WVPlots::ShadedDensity(frame = Z,
xvar = "V2",
threshold = threshold,
title = "Your title",
tail = "right")
p

But since you want the colour of the line to be lightblue etc, you need to manipulate the object p
. In this regard, see also this and this question.
The object p
contains four layers: geom_line
, geom_ribbon
, geom_vline
and geom_text
. You'll find them here: p$layers
.
Now you need to change their aesthetic mappings. For geom_line
there is only one, the colour
p$layers[[1]]$aes_params
$colour
[1] "darkgray"
If you now want to change the line colour to be lightblue simply overwrite the existing colour like so
p$layers[[1]]$aes_params$colour <- "lightblue"
Once you figured how to do that for one layer
, the rest is easy.
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
And the plot now looks like this
