在this个问题中,我们在答案中看到一个简单的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"
的目的是什么?
答案 0 :(得分:2)
有两层密切相关:geom_bar()
和geom_col()
。关键区别在于它们默认情况下如何汇总数据。
对于geom_bar()
,默认行为是为每个 x 值计算行数。它不期望 y 值,因为它会自行计算-实际上,如果您给它一个警告,它就会标记警告,因为它认为您很困惑。指定如何进行聚合作为geom_bar()
的参数,默认值为stat = "count"
。
如果您在stat = "identity"
中明确说出geom_bar()
,则是在告诉ggplot2
跳过汇总,并提供 y 值。这反映了下面geom_col()
的自然行为。
对于geom_col()
,默认情况下它不会尝试聚合数据。在文档中,“ {geom_col()
使用stat_identity()
:它使数据保持不变”。因此,它希望您已经计算出 y 值并直接使用它们。而且geom_col()
没有论据来改变这种行为-它总是会绘制您提供的 y 值,而您需要提供它们。
如果您有 y 个值,则可以使用任一种语法,但我发现geom_col()
更直接。
答案 1 :(得分:2)
@Stevec。
我在 rdocumentation.org 找到了答案。
见下文stat='identity'的含义:
<块引用>“条形的高度通常代表两件事之一:每组中的案例数,或数据框列中的值。默认情况下,geom_bar 使用 stat="bin"。这使得每个条形的高度等于每组中的案例数,这与将值映射到 y 美学不兼容。如果您希望条形的高度代表数据中的值,请使用 stat="identity" 并映射 a y 美学的价值。”
希望这对您有所帮助。
点击文档链接:geom_bar documentation
答案 2 :(得分:1)
默认情况下,geom_bar()
使用stat_count()
绘制x
每个级别(某些分组变量)上案件的发生频率。相比之下,可以通过提供参数stat_identity()
来绘制stat = "identity"
各个级别的值,而用x
覆盖。原因geom_bar()
旨在绘制频率,否则单个值可能更有效地由单个点表示。