Fill different colors for each quantile in geom_de

2019-05-10 13:51发布

问题:

This question already has an answer here:

  • adding percentile lines to a density plot [duplicate] 2 answers
  • Shading a kernel density plot between two points. 5 answers

I am using ggplot to show percentiles of the data. I am using the following code,

data <- seq(from=0,to=30,length.out=1000)

q <- quantile(data)

ggplot()+ 
  geom_density(aes(x=data)) +  
  annotate(geom="text", x=q, y=0, label=names(q)) +
  theme(text = element_text(size=10)) +
  geom_vline(x=q, linetype = "longdash")

The following is the graph I am getting,

I am looking to fill different colors for each segment. i.e. for 0-25% one color and 25-50 another color. Is it possible to do that?

Also the vertical lines are running through the entire graph. I want to stop it until the curve alone. Instead of running through it completely.

can anybody help me in doing these both?

回答1:

Simply copying answer from where Sam is pointing to

dt <- data.frame(x=c(1:200),y=rnorm(200))
dens <- density(dt$y)
df <- data.frame(x=dens$x, y=dens$y)
probs <- c(0, 0.25, 0.5, 0.75, 1)
quantiles <- quantile(dt$y, prob=probs)
df$quant <- factor(findInterval(df$x,quantiles))
ggplot(df, aes(x,y)) + geom_line() + geom_ribbon(aes(ymin=0, ymax=y, fill=quant)) + scale_x_continuous(breaks=quantiles) + scale_fill_brewer(guide="none")


标签: r ggplot2