在ggplot 2中绘制累积计数

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (40)

寻找一个纯的ggplots解决方案。

让我们展示一下我到目前为止的情况:

x <- data.frame(A=replicate(200,sample(c("a","b","c"),1)),X=rnorm(200))

格格特氏stat_ecdf

我可以用ggart的stat_ecdf,但它只绘制了累积密度:

ggplot(x,aes(x=X,color=A)) + geom_step(aes(y=..y..),stat="ecdf")

我想做以下几件事,但它不起作用:

ggplot(x,aes(x=X,color=A)) + geom_step(aes(y=..y.. * ..count..),stat="ecdf")

cumsumstat_bin

我找到了一个想法cumsumstat_bin:

ggplot(x,aes(x=X,color=A)) + stat_bin(aes(y=cumsum(..count..)),geom="step")

但是正如你所看到的,下一个颜色不是从y=0最后一种颜色结束的地方。

我想要的

我想要的是从最好到最坏的结果:

  1. 理想情况下,对不工作的人进行简单的修复。 GGPLOT(x,AES(x=X,color=A))+geom_步骤(AES(y=...y.)*),stat=“ecdf”)
  2. 一种更复杂的使用方法stat_ecdf还有数。
  3. 最后的办法是使用cumsum方法,因为它会带来更糟糕的(绑定)结果。
提问于
用户回答回答于

这不会直接解决行的分组问题,但它将是一个解决办法。

可以将三个调用添加到stat_bin()在其中,根据A水平。

ggplot(x,aes(x=X,color=A)) +
  stat_bin(data=subset(x,A=="a"),aes(y=cumsum(..count..)),geom="step")+
  stat_bin(data=subset(x,A=="b"),aes(y=cumsum(..count..)),geom="step")+
  stat_bin(data=subset(x,A=="c"),aes(y=cumsum(..count..)),geom="step")

二次

使用geom的更新解决方案_步骤()

另一种可能性是将..y..每个级别的观察数。要想在这个时刻得到这么多的观测结果,我发现的唯一方法就是在绘制之前预先计算它们,并将它们添加到原始数据帧中。我把这个专栏命名为len...。然后进去geom_step()aes()您应该定义使用变量。len=len然后定义y值为y=..y.. * len...

set.seed(123)
x <- data.frame(A=replicate(200,sample(c("a","b","c"),1)),X=rnorm(200))
library(plyr)
df <- ddply(x,.(A),transform,len=length(X))
ggplot(df,aes(x=X,color=A)) + geom_step(aes(len=len,y=..y.. * len),stat="ecdf") 

扫码关注云+社区