library(tidyverse)
mpg %>%
filter(manufacturer == "dodge") %>%
count(cyl) %>%
ggplot(aes(reorder(cyl, -n), n), fill = "blue") + # line 5
geom_col() +
# geom_col(fill = "blue") +
NULL
我上面注释掉的代码将用蓝色填充我的条形图列。但是,上面显示的代码并没有用蓝色填充我的列。为什么不?我没有正确地规定在代码的第五行中所有美学应该用蓝色填充吗?
答案 0 :(得分:2)
您可以在?ggplot
的文档中看到,省略号自变量为:“其他自变量传递给方法。当前未使用。”在aes()
调用中(在图层中或在主ggplot调用中)提供了美学映射。
将美学映射与简单美学区分开是有意义的;提供给您的主要ggplot调用为"fill = blue"
是一种美感,而aes(reorder(cyl, -n), n)
是一种美感映射(因为它将输入数据映射到x轴和y轴上的坐标)。 ggplot主调用接受美学映射,但不接受美学。层接受它们两者。可以通过省略号参数接受美学,然后将其传递给相关的geom或stat。当然,如果可以为ggplot主调用提供简单的美感,那么这必须同时适用于所有层,我怀疑这与图形正统语法试图实现的目的有点矛盾。
有一种方法可以设置几何图形的美观,而无需在图层生成器本身中指定它,而这是通过更新默认值来实现的。
update_geom_defaults("col", list(fill = "blue"))
mpg %>%
filter(manufacturer == "dodge") %>%
count(cyl) %>%
ggplot(aes(reorder(cyl, -n), n)) +
geom_col()
不幸的是,这将改变您以后创建的所有geom_col()
绘图,甚至可能追溯地影响您存储在变量下的绘图。但是,我不完全知道不通过在图层中指定变量即可获得什么。