使用ggplot聚合数据

nat*_*rio 9 plot r 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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,我想看到的是每个不同值的平均条目数(每个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')
Run Code Online (Sandbox Code Playgroud)

这给了我想要的输出:

在此输入图像描述

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

mto*_*oto 15

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

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

在此输入图像描述