参数何时进入 aes() 内部或外部?

Mau*_*vao 7 r ggplot2

我正在阅读 Wickham 和 Grolemund 的“R for data science”中有关可视化的第一章。

我努力了:

 ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = "blue"))
Run Code Online (Sandbox Code Playgroud)

希望实现所有点都为蓝色的情节,但令我惊讶的是,它们都是红色的!阅读正确的代码来实现蓝点,在印刷版本的第11页或在线版本的第3.3节中,我发现它应该是

ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy), color = "blue")
Run Code Online (Sandbox Code Playgroud)

事实上,他们指出,要手动设置美感,您必须在 aes() 函数之外,但在相应的 geom(此处为 geom_point())内给出它。为什么会这样呢?这种行为的确切解释是什么?事实上,对我来说,正确的语法将是第一个命令的语法似乎很自然。我想这个问题与层和/或变量的范围有关,但我只是无法掌握它的窍门。 .有人可以用勺子喂我吗?

编辑:抱歉,我没有做正确的作业:这只是相应部分末尾的文本本身中提出的练习 1...但我仍然无法得到答案。

Mau*_*vao 9

Hadley Wickham 本人在“ggplot2.用于数据分析的优雅图形”第二版的第 5.4.2 节中明确处理了这个问题,更具体地说,两个提到的命令的输出差异:

任何一个:

  • 您可以将数据变量aes(内部)映射到美学,例如,或...aes(..., color = VarX)
  • 您可以将美感(在元素外部aes,但在元素内部)设置为恒定值,例如“蓝色”geom

在第一种情况下,映射美学,例如color,ggplot2 根据所有可用颜色(在色轮上)的均匀平均值来选择颜色,因为映射变量的值都是常数;为什么选择的颜色应该与您碰巧选择映射的常量值一致?更明确地说,如果您尝试以下命令:

ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y =hwy, color = "foo"))
Run Code Online (Sandbox Code Playgroud)

您将得到与原始问题的第一个命令完全相同的输出图。