6

如果没有聚合列的中间计算,如何获得相同的图。

我有这个数据:

set.seed(1234)
dat <- data.frame(month = gl(3,1,20),
                  family= gl(5,1,20),
                  amount= sample(1:3,20,rep=TRUE))

使用此代码,我得到一个条形图。其中每个 bar 是按家庭和按月计算的金额总和。首先,我创建一个新的聚合列 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")
4

2 回答 2

7
ggplot(data=dat,aes(x=month,y=amount,fill=family,group=family))+
  geom_bar(stat = "summary",fun.y=sum)

在此处输入图像描述

于 2013-04-24T17:57:26.380 回答
4

我在 R 帮助邮件列表中发现有一个参数weight=可用于获取特定值的总和,而不是在生成堆叠条形图时使用计数。您必须提供x值、fill=值并weight=amount确保amount使用值的总和来制作条形高度。这也自动确保fill=值以相同的顺序排列。

ggplot(dat,aes(month,fill=family,weight=amount))+geom_bar()

在此处输入图像描述

于 2013-04-24T17:56:14.220 回答