为什么不能在ggplot的顶层指定填充颜色?

时间:2019-07-29 15:37:40

标签: r ggplot2

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

我上面注释掉的代码将用蓝色填充我的条形图列。但是,上面显示的代码并没有用蓝色填充我的列。为什么不?我没有正确地规定在代码的第五行中所有美学应该用蓝色填充吗?

geom_col() fill color

1 个答案:

答案 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()

enter image description here

不幸的是,这将改变您以后创建的所有geom_col()绘图,甚至可能追溯地影响您存储在变量下的绘图。但是,我不完全知道不通过在图层中指定变量即可获得什么。