首页 > 解决方案 > 为什么在ggplot的geom_bar中需要stat =“identity”?

问题描述

这个问题中,我们看到了一个简单geom_line的答案。

library(dplyr)
BactData %>% filter(year(Date) == 2017) %>% 
  ggplot(aes(Date, Svartediket_CB )) + geom_line()

如果我们更改geom_line为,geom_bar我们可能希望看到一个条形图,但是

错误:stat_count() 不得与任何美学一起使用。

但是如果我们添加它就可以了stat = "identity",就像这样

library(dplyr)
BactData %>% filter(year(Date) == 2017) %>% 
  ggplot(aes(Date, Svartediket_CB )) + geom_bar(stat = "identity")

为什么geom_bar没有stat = "identity"- 即它的目的是stat = "identity"什么?

标签: rggplot2

解决方案


有两层密切相关:geom_bar()geom_col()。关键区别在于它们默认聚合数据的方式。

对于geom_bar(),默认行为是计算每个x值的行数。它不期望一个y值,因为它会自己计算 - 事实上,如果你给它一个警告,它会标记一个警告,因为它认为你很困惑。如何执行聚合被指定为 的参数geom_bar(),这是stat = "count"默认值。

如果您明确地说stat = "identity"in geom_bar()ggplot2则表示您要跳过聚合并提供y值。这反映了geom_col()下面的自然行为。

在 的情况下geom_col(),默认不会尝试聚合数据。从文档中,“geom_col()使用stat_identity():它使数据保持原样”。因此,它希望您已经计算出y值并直接使用它们。并且geom_col()没有改变这种行为的论据——它总是会绘制你提供的y值,你需要提供它们。

如果你有y值,你可以使用任何一种语法,但我发现geom_col()更直接。


推荐阅读