为什么`cumsum`在ggplot中的组或方面不起作用?

时间:2013-10-15 12:30:50

标签: r ggplot2

借用Plotting cumulative counts in ggplot2

中的示例
x <- data.frame(A=replicate(200,sample(c("a","b","c"),1)),X=rnorm(200))
ggplot(x,aes(x=X,color=A)) + stat_bin(aes(y=cumsum(..count..)),geom="step")

enter image description here

如您所见,cumsum跨群组工作面。我想知道它为什么这样做?显然,..count..是在群组内完成的,为什么cumsum在申请..count..时没有? ggplot会在内部将所有..count..捕获到一个向量中,然后将cumsum应用于它吗?

如何正确解决它而无需预处理,例如使用plyr

我不介意geom不是step,只要图表是累积图,它就可以是line甚至bar。< / p>

1 个答案:

答案 0 :(得分:1)

以下是我用一行代码(ddply和mutate)处理这个问题的方法:

df <- data.frame(x=rnorm(1000),kind=sample(c("a","b","c"),1000,replace=T),
         label=sample(1:5,1000,replace=T),attribute=sample(1:2,1000,replace=T))

dfx <- ddply(df,.(kind,label,attribute),mutate,cum=rank(x)/length(x))

ggplot(dfx,aes(x=x))+geom_line(aes(y=cum,color=kind))+facet_grid(label~attribute)