ggplot2 stat_function - 我们可以在其他图层上使用生成的y值

use*_*979 8 r ggplot2

当我试图用ggplot绘制标准正态分布时(这很容易与stat_function一起使用)并且还为不同的五分位数绘制曲线下面积 - 这个问题出现了 -

在此输入图像描述

在我创建了一个数据框,其中包含x的值范围和每个x的相应dnorm值为y之后,我能够使用geom_line和geom_ribbon执行此操作.

    data = data.frame(x=seq(-3,3,length.out=1000))
data$y=dnorm(data$x)
data$Quintile <- with(data,ifelse(x<qnorm(0.2),"Bottom",
                               ifelse(x<qnorm(0.4),"Second",
                                      ifelse(x<qnorm(0.6),"Middle",
                                             ifelse(x<qnorm(0.8),"Fourth","Top")))))
data$Quintile <- factor(data$Quintile, levels=c("Bottom","Second","Middle","Fourth","Top"))

ggplot(data,aes(x=x,y=y,fill=Quintile))+geom_ribbon(aes(ymax=y),ymin=0,alpha=0.5)+
  geom_line(color="black")+theme_bw()+theme(legend.position="bottom")+
  scale_fill_manual(values=c("darkgreen","red","purple","blue","gray"))+
  geom_vline(xintercept=c(qnorm(c(0.2,0.4,0.6,.8))),color=c("darkgreen","red","purple","blue"),size=1)+
  scale_y_continuous("",breaks=NULL)+scale_x_continuous("",breaks=NULL)
Run Code Online (Sandbox Code Playgroud)

我发现使用stat_function更有吸引力,我想它必须创建一组y值来绘制线 - 我试图访问其他图层上的那些以添加彩色条带但是无法做到 - 我想看看是否有人可以解释如何做到这一点或为什么我们做不到

换句话说,不是自己生成数据,而是使用geom_line绘制曲线,我想做类似的事情

ggplot(NULL,aes(x=c(-3,3))) + stat_function(fun=dnorm)
Run Code Online (Sandbox Code Playgroud)

并使用stat_function生成的数据进行着色 - 我无法访问生成的y值(我尝试使用..y ..例如)

有没有办法使用这些值?如果是这样的话?

bap*_*ste 5

ggplot(NULL,aes(x=c(-3,3))) + 
  stat_function(fun=dnorm, geom="ribbon",
                mapping = aes(ymin=0,ymax=..y..))
Run Code Online (Sandbox Code Playgroud)