图层属性映射
aes()函数用来将数据变量映射到图形或aesthetics中
aes()函数里有一系列的图形属性参数
aes(x = displ, y = hwy, color = class)
这里将x坐标映射到displ,y坐标映射到hwy,颜色映射到class,其中前两个参数可以省略名字,他们会自动匹配到x和y轴
aes(displ, hwy, color = class)
尽管可以用aes()处理数据,如aes(log(carat), log(price)),但是最好仅作一些简单的计算
将复杂的转换转移到aes()调用的外面,并转入dplyr::mutate()调用
这样很容易检查拼写并加快计算速度,因为此时仅作了一次转换,而不是每次画图的时候都转换
不要在aes()中涉及带有$的变量 diamonds$carat,它可以破坏代码,以至于图不再包括之前需要的元素,并且,如果ggplot2改变行的顺序,这会和分面一样引起问题
1. 在图和图层中指定图形属性
在个别的图层中或在某些两者的结合部分,图层属性映射可在最初的ggplot()调用中提供。以下所有调用创建出相同效果的图
ggplot(mpg, aes(displ, hwy, color = class)) +
geom_point()
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = class))
ggplot(mpg, aes(displ)) +
geom_point(aes(y = hwy, color = class))
ggplot(mpg) +
geom_point(aes(displ, hwy, color = class))
在每一层内,可以添加、修改或删除默认映射
操作 | 图层图形属性 | 结果 |
---|---|---|
添加 | aes(color = cyl) | aes(mpg, wt, color = cyl) |
修改 | aes(y = disp) | aes(mpg, disp) |
删除 | aes(y = NULL) | aes(mpg) |
如果图中仅有一个图层,那么对你指定图形属性的方式没有什么影响
但是,如果要加一个额外图层的话,就会有很大的区别
ggplot(mpg, aes(displ, hwy, color = class)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
theme(legend.position = "none")
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = class)) +
geom_smooth(method = "lm", se = FALSE) +
theme(legend.position = "none")
2. 设定和映射
除了可以将一个图形属性映射到一个变量,也可以在图层的参数里将其设定为一个单一值。将图层属性映射到一个变量中(如,aes(color = cut)),或把它设定到一个常数中(如,color = “red”)。如果想用变量控制图形属性的话,将规则写入aes()中;如果想修改默认尺寸或颜色,将值写在aes()外面
尽管下面的代码相似,但是输出却有所不同。第二个图将颜色映射(不是设置)到“darkblue”。实际上是先创建了一个包含值为“darkblue”字符的变量,然后将color映射到这个新变量。因为这个新变量的值是离散型的,但是默认的颜色标度将用色轮上等间距的颜色,并且此处新变量只有一个值,因此这个颜色就是桃红色
ggplot(mpg, aes(cty, hwy)) +
geom_point(color = "darkblue")
ggplot(mpg, aes(cty, hwy)) +
geom_point(aes(color = "darkblue"))
第三个方法是映射到值,并覆盖默认的标度
ggplot(mpg, aes(cty, hwy)) +
geom_point(aes(color = "darkblue")) +
scale_color_identity()
有时将图层属性属性映射到常量是很有用的。例如,如果想用变化的参数展示多图层,可以“命名”每个图层
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
geom_smooth(aes(color = "loess"), method = "loess", se = FALSE) +
geom_smooth(aes(color = "lm"), method = "lm", se = FALSE) +
labs(color = "Method")