如何让ggplot ecdf以填充背景绘图

时间:2014-10-30 01:58:00

标签: r plot ggplot2

我试图让我的经验累积密度曲线填充其背景,但似乎无法实现。

我尝试了以下两种方法,第一种方法似乎改变了曲线的alpha而不是填充

ggplot( myDataFrame , aes( x=myVariable , fill=myFactor ) )                       +
geom_step      ( stat="ecdf" , aes( colour = myFactor  ) , alpha=1 )              +
coord_cartesian( xlim = c( 0 , quantile( myDataFrame$myVariable , prob=0.99 ) ) ) +
facet_grid     ( myFactor ~ . , scales="free_y" )

第二个似乎与上述

相同
ggplot( myDataFrame , aes( x=myVariable , fill=myFactor ) )                       +
stat_ecdf      ( aes( colour = myFactor ) ,alpha=0.2 )                            +
coord_cartesian( xlim = c( 0 , quantile( myDataFrame$myVariable , prob=0.99 ) ) ) +
facet_grid     ( myFactor ~ . , scales="free_y" )

我也想知道它是否会填满整个xlim的100%,因为早期的饱和因子水平。

Empirical Cumulative Densities across Factor level subsets

1 个答案:

答案 0 :(得分:4)

这样的东西?

library(ggplot2)
set.seed(1)
df <- data.frame(var=c(rnorm(1000),rpois(1000,25),rgamma(1000,25)),
                 fact=rep(c("N","P","G"),each=1000))
ggplot(df,aes(x=var,fill=fact))+
  stat_ecdf(aes(ymin=0,ymax=..y..),geom="ribbon")+
  stat_ecdf(geom="step")+
  facet_grid(fact~.,scales="free_y")

修改 :(回复以下评论)。

符号..y..提供对映射到ggplot的y美学内容的访问权限。

stat_*(...)函数创建一个映射到y - 美学的隐式变量。对于stat_ecdf(...),它是ecdf:x中观察值小于或等于给定x的部分。 ggplot会自动将此内部变量映射到y - 美学。

但在这种情况下,我们正在使用功能区几何图形,这需要ymaxymin美学,而不是y。因此,通过设置ymax=..y..,我们告诉ggplot将ymax - 美学映射到映射到y的任何内容。