如果没有聚合列的中间计算,我怎样才能得到相同的图。
我有这些数据:
set.seed(1234)
dat <- data.frame(month = gl(3,1,20),
family= gl(5,1,20),
amount= sample(1:3,20,rep=TRUE))
使用此代码,我得到了一个条形图。每个条形图,是按家庭和按月计算的金额之和。首先,我创建了一个新的aggegate列V1。
## I am using data.table , you can get it by ddply also
library(data.table)
dd <- data.table(dat)
hh <- dd[,sum(amount),by=list(month,family)]
然后我使用这段代码绘图:
ggplot(data=hh,aes(x=month,y=V1,fill=family))+
geom_bar(stat = "identity")
获得这个情节:
这有效,但我想要更简单的方法。我认为使用stat_sum
或其他ggplot2
技术我可以在没有中间聚合步骤的情况下执行此操作。像这样的东西:
## don't run this doesn't work
ggplot(data=dat,aes(x=month,y=amount,fill=family))+
geom_bar(stat = "sum")
答案 0 :(得分:7)
ggplot(data=dat,aes(x=month,y=amount,fill=family,group=family))+
geom_bar(stat = "summary",fun.y=sum)
答案 1 :(得分:4)
我在R help mailing list上发现有一个参数weight=
,可用于获取特定值的总和,而不是生成堆积条形图的计数。您必须提供x
值,fill=
值和weight=amount
,以确保使用amount
值的总和来提高条形高度。这也会自动确保fill=
值以相同的顺序排列。
ggplot(dat,aes(month,fill=family,weight=amount))+geom_bar()