使用ggplot聚合数据

时间:2016-06-10 13:54:47

标签: r plot ggplot2

我们以mpg数据集为例,特别是classcyl列。我可以看到每个class有多少条目,并根据cyl值区分填充颜色:

library(ggplot2)
p <- ggplot(mpg)
p <- p + geom_bar(mapping=aes(x=class, fill=factor(cyl)), position=position_dodge())
print(p)

enter image description here

我希望看到的是,根据class的不同值,平均条目数(每cyl)。基本上,如果你看一下上面的情节,我想要每个类一个单独的条,其高度应该是该类彩色条的平均高度。

我能够通过预处理数据帧来获得这个结果,例如:

df <- aggregate(formula=cyl~class, data=mpg, FUN=function(x) { length(x) / length(unique(x)) })
p <- ggplot(df)
p <- p + geom_bar(mapping=aes(x=class, y=cyl), stat='identity')
p <- p + ylab('average count')

这提供了所需的输出

enter image description here

然而,考虑到ggplot2有多强大,我想知道这是否可以通过ggplot函数实现。我想这涉及使用特定的stat(可能与group=cyl?),但我无法做到。

1 个答案:

答案 0 :(得分:14)

我们可以将您的公式直接插入stat_summary()以生成所需的结果,而无需中间步骤:

library(ggplot2)
ggplot(mpg) + 
  stat_summary(aes(x = class, y = cyl), 
               fun.y = function(x) length(x) / length(unique(x)), 
               geom = "bar")

enter image description here