审美何时进入aes()内部或外部?

时间:2017-01-25 22:42:46

标签: r ggplot2

我正在关注Wickham和Grolemund的第1章" R for data science"关于可视化。

我试过了:

ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy), color = "blue")

希望能够获得所有点蓝色的情节,但令我惊讶的是,它们都是红色的!阅读正确的代码以获得蓝点,在印刷版的第11页或Section 3.3 of the online version中,我发现它应该是

chrome://flags/#enable-add-to-shelf
事实上,他们声明,要手动设置美学,你必须在aes()函数之外,但在相应的geom,geom_point()这里。为什么会这样?这种行为的确切解释是什么?事实上,对我来说,正确的语法是第一个命令之一似乎很自然。我猜这个问题与层和/或变量范围有关,但我无法得到它的悬念。有人会用勺子喂我吗?

编辑:很抱歉没有做正确的作业:这只是在相应章节末尾的文本中提出的练习1 ......但答案仍然让我感到厌烦。

2 个答案:

答案 0 :(得分:3)

这个问题,更具体地说,两个提到的命令的输出差异在第2版" ggplot2的第5.4.2节中明确说明。数据分析的优雅图形",Hadley Wickham本人:

或者:

  • 您可以将您的数据的变量映射(在function showLng(tableId, x, y) { var table = document.getElementById(tableId); var row = table.insertRow(0); var cell1 = row.insertCell(0); var cell2 = row.insertCell(1); var cell3 = row.insertCell(2); cell1.innerHTML = ""; cell2.innerHTML = x; cell3.innerHTML = y; } 内)美化,例如aes或......
  • 您可以设置(在aes(..., color = VarX)之外,但在aes元素内)美学到常数值,例如"蓝色"

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

color

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

答案 1 :(得分:1)

我记得当我开始使用ggplot时,我对此感到非常困惑。

要以@Mauicio Calvao的答案为基础,请在color内使用aes,通过要绘制的data.frame变量来分解图中的颜色,例如:

ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = drv))

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

要在color内按aes分组后分配颜色,请使用scale_color_manual

ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = drv))+
    scale_colour_manual(values = c("black","blue","orange"))