我们以mpg数据集为例,特别是class和cyl列.我可以看到每个单元有多少条目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)