繁体   English   中英

为什么 ggplot 中的 geom_bar 需要 stat = "identity" ?

[英]Why is stat = "identity" necessary in geom_bar in ggplot?

这个问题我们看到答案中有一个简单的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"

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

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

如果您在geom_bar()明确说stat = "identity" ,您是在告诉ggplot2跳过聚合并且您将提供y值。 这反映了下面geom_col()的自然行为。

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

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

默认情况下geom_bar()使用stat_count()来绘制x每个级别(一些分组变量)的案例频率。 相比之下,这可以用stat_identity()覆盖, stat_identity()是提供参数stat = "identity"来绘制x每个级别的值。 原因是geom_bar()旨在绘制频率,否则单个值可以更有效地由单个点表示。

@史蒂夫。

我在rdocumentation.org找到了答案。

请参阅下面的含义stat='identity'

“条形的高度通常代表两件事之一:每组中的案例数,或数据框列中的值。默认情况下,geom_bar 使用 stat="bin"。这使得每个的高度bar 等于每组中的案例数,它与将值映射到 y 美学不兼容。如果您希望条形的高度代表数据中的值,请使用 stat="identity" 并将值映射到你的审美。”

希望这是有帮助的。

按照文档链接: geom_bar 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM