总结自知乎@黄宝臣
作者:黄宝臣
链接:https://www.zhihu.com/question/24779017/answer/38750383
任何与数据向量顺序相关,需要逐个指定的参数都必须写在aes里(分组)
例子:
根据qsec来分组,表现为颜色
p <- ggplot(mtcars, aes(wt, mpg)) #<---- code 1
p + geom_point(aes(colour = qsec)) #<---- code 2
画图实现的过程
code 1: ggplot首先载入了这个mtcars的集合,然后指定给了mpg作为其x坐标位置,wt为y坐标位置。
code 2: 指定了qsec作为其染色的标准(分组),qsec为numeric变量,因此,应该选择连续型的标尺,而不是分组染色。然后开始绘制,读取mtcars m p g [ 1 ] 、 m t c a r s mpg[1]、mtcars mpg[1]、mtcarswt[1],确定位置,然后为其染成mtcars$qsec[1]颜色;再绘制第二点。。。
不分组,整体为绿色
p + geom_point(color = "green")
注意,绿色并没有放在aes函数中,这时绿色针对所有点
如果把green放在aes函数中
p + geom_point(aes(colour = "green"))
这时的图是这样的:
为何是粉色?
首先,数据的初始化跟上面那个例子是相同的。然后,因为color放到了aes里,于是ggplot开始搜索mtcars里面的向量了,发现没有叫"green"的,然后又找了global,也没有。于是,ggplot就开始把它认作了一个新的向量。
即这里,aes没有找到变量名green于是把它变成了一个只有一个长度的向量。因子水平为1
想统一整个图层时就放到aes外,想分成不同组调整,并且已经有一个与x、y长度一致的分组变量了,那就放到aes里。