首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >参数什么时候进入到aes()内部还是外部?

参数什么时候进入到aes()内部还是外部?
EN

Stack Overflow用户
提问于 2017-01-25 22:42:46
回答 3查看 2.8K关注 0票数 6

我遵循的第一章的韦翰和Grolemund的"R为数据科学“的可视化。

我试过:

代码语言:javascript
复制
 ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = "blue"))

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

代码语言:javascript
复制
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy), color = "blue")

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

编辑:对不起,我没有做正确的家庭作业:这只是练习1在课文本身的相应章节结尾.然而,答案仍然让我无法理解。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-26 00:38:02

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

以下任一项:

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

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

代码语言:javascript
复制
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y =hwy, color = "foo"))

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

票数 8
EN

Stack Overflow用户

发布于 2018-08-28 06:54:19

我还记得当我开始使用ggplot的时候,我对此是多么的困惑。

为了建立@Mauicio的答案,请使用color in aes来用正在绘制的data.frame变量来分解情节中的颜色:

代码语言:javascript
复制
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = drv))

因此,当color (或sizelinetype或类似的东西)在aes中时,它实际上是在问应该确定哪个对象\变量来确定颜色组。如果这是一个字符串(如"blue"),那么它们都给出了一个组,但是该组的名称与实际颜色无关。

若要在color中指定颜色(一旦按aes分组),则使用scale_color_manual

代码语言:javascript
复制
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = drv))+
    scale_colour_manual(values = c("black","blue","orange"))
票数 2
EN

Stack Overflow用户

发布于 2022-09-21 15:47:41

这是一个相当老的帖子,但我被这个问题困了几个小时,这个讨论帮助我把事情弄清楚了。所以我给出一个简短的答案。

使用您的第一行代码(其中的颜色在aes()中),将不会将任何着色应用于您的情节。

代码语言:javascript
复制
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = "blue"))

为什么不行?如果您检查aes()内部发生了什么,就会发现displ (您的x变量)和hwy (您的y变量)。“蓝色”在这里是怎么回事?实际上并不是这样,因为“蓝色”(字符串)并不存在于你的数据中,它并不作为一种新的色彩美学应用于你的情节中。相反,它只会添加到您的传奇(这里的“蓝色”可能是任何字符串)。

在您的第二行代码中,颜色超出了aes(),正如您所看到的,它可以工作。在这种情况下,只有一种颜色,你不需要显示一个传奇。

代码语言:javascript
复制
 ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy), color = "blue")

如果您希望在使用第三个变量(在本例中为drv)时控制颜色美学的特定颜色,则应该使用scale_fill_manual()。

代码语言:javascript
复制
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = drv))+ 
+scale_color_manual(values=c("green", "yellow", "red"))                   

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41863049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档