用ggplot绘图(二)
2015年04月05日 R 可视化 ggplot 行 添加评论aes是什么?
这是ggplot里第一个难以理解的概念,aes是aesthetic mapping的缩写,也即“美学映射”。文档里对aes
是这么描述的:
Generate aesthetic mappings that describe how variables in the data are mapped to visual properties (aesthetics) of geoms.
也就是aes
是用来构造数据到可见属性的映射的函数,也就是描述图像的横坐标,纵坐标,颜色,大小等等性质使用什么数据来定义。
这个函数只是建立一个未执行的列表,因此不用担心计算时间的消耗。下面是一个aes
的例子:
library(ggplot2)
(map <- aes(x=Sepal.Length, y=Petal.Length, color=Sepal.Width))
## List of 3
## $ x : symbol Sepal.Length
## $ y : symbol Petal.Length
## $ colour: symbol Sepal.Width
注意到aes
建立的是未执行的列表,因此你不需要有一个数据对应到这些变量,这些变量的对应只有在最终ggplot绘图的时候才真正需要。这也就是说,你可以用一个模拟的数据来设计图形,最后再用真实的数据获取最终结果。
data(iris)
# 仅使用花瓣宽度大于1.6的数据生成图像
ggplot(iris[iris$Petal.Width>1.6,],map) +
geom_point()
# 使用整个数据生成图像
ggplot(iris,map) +
geom_point()
如果你不知道上面语句中的ggplot
和geom_point
的意义,没有关系,以后我们将仔细的介绍。需要注意的是aes
只是构造数据名和图形属性直接的关系,至于数据是什么,aes
里是没有指定。也就是说aes
仅仅是数据名称和图形属性间的映射。之所以说ggplot是一个图形描述语言,就是因为像aes
这样的特性仅仅在描述怎么生成图像,而和数据以及生成的细节无关。
提示:如果你是R的base绘图库的用户,base绘图中的参数大部分可以在ggplot里定义,但是建议尽量不要使用base中的参数,那些并不容易理解。比如pch
也就是点的形状,它在ggplot里和shape
是等效的;相似的cex
和size
也是等效的。
好的,到这里我们已经建立了数据和图像属性的映射了,那么怎么绘图呢?是用ggplot
吗?答案是不是的,实际上如果上面的例子里你只用ggplot那一行你会得到一个错误提示:
ggplot(iris,map)
Error: No layers in plot
而这个错误和空参数的ggplot是一样的:
ggplot()
Error: No layers in plot
那么要怎么才能绘图呢?那就要提到ggplot的绘图策略了,下面让我们先看一下geom_*
。会使用geom_*
后你就可以开始画出一些想要的图像了。