借用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")
如您所见,cumsum
跨群组工作面。我想知道它为什么这样做?显然,..count..
是在群组内完成的,为什么cumsum
在申请..count..
时没有? ggplot会在内部将所有..count..
捕获到一个向量中,然后将cumsum
应用于它吗?
如何正确解决它而无需预处理,例如使用plyr
?
我不介意geom
不是step
,只要图表是累积图,它就可以是line
甚至bar
。< / p>
答案 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)