% filter(year(Date) == 2017) %>% ggplot-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:44:02 24 4
gpt4 key购买 nike

this问题中,我们在答案中看到一个简单的geom_line

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

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

Error: stat_count() must not be used with a y aesthetic.



但是,如果我们像这样添加 stat = "identity",它就可以工作
library(dplyr)
BactData %>% filter(year(Date) == 2017) %>%
ggplot(aes(Date, Svartediket_CB )) + geom_bar(stat = "identity")

为什么没有 geom_barstat = "identity"不起作用-即 stat = "identity"的目的是什么?

最佳答案

有两个紧密相关的层:geom_bar()geom_col()。关键区别在于它们默认情况下如何汇总数据。

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

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

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

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

关于r - 为什么ggplot的geom_bar中需要stat = "identity"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59008974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com