ggplot2 shade area under density curve by group

前端 未结 3 1788
深忆病人
深忆病人 2020-11-29 10:28

I have this dataframe:

set.seed(1)
x <- c(rnorm(50, mean = 1), rnorm(50, mean = 3))
y <- c(rep(\"site1\", 50), rep(\"site2\", 50))
xy <- data.frame(         


        
3条回答
  •  眼角桃花
    2020-11-29 11:07

    Here is one way (and, as @joran says, this is an extension of the response here):

    #  same data, just renaming columns for clarity later on
    #  also, use data tables
    library(data.table)
    set.seed(1)
    value <- c(rnorm(50, mean = 1), rnorm(50, mean = 3))
    site  <- c(rep("site1", 50), rep("site2", 50))
    dt    <- data.table(site,value)
    #  generate kdf
    gg <- dt[,list(x=density(value)$x, y=density(value)$y),by="site"]
    #  calculate quantiles
    q1 <- quantile(dt[site=="site1",value],0.01)
    q2 <- quantile(dt[site=="site2",value],0.75)
    # generate the plot
    ggplot(dt) + stat_density(aes(x=value,color=site),geom="line",position="dodge")+
      geom_ribbon(data=subset(gg,site=="site1" & x>q1),
                  aes(x=x,ymax=y),ymin=0,fill="red", alpha=0.5)+
      geom_ribbon(data=subset(gg,site=="site2" & x

    Produces this:

提交回复
热议问题