用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()

如果你不知道上面语句中的ggplotgeom_point的意义,没有关系,以后我们将仔细的介绍。需要注意的是aes只是构造数据名和图形属性直接的关系,至于数据是什么,aes里是没有指定。也就是说aes仅仅是数据名称和图形属性间的映射。之所以说ggplot是一个图形描述语言,就是因为像aes这样的特性仅仅在描述怎么生成图像,而和数据以及生成的细节无关。

提示:如果你是R的base绘图库的用户,base绘图中的参数大部分可以在ggplot里定义,但是建议尽量不要使用base中的参数,那些并不容易理解。比如pch也就是点的形状,它在ggplot里和shape是等效的;相似的cexsize也是等效的。

好的,到这里我们已经建立了数据和图像属性的映射了,那么怎么绘图呢?是用ggplot吗?答案是不是的,实际上如果上面的例子里你只用ggplot那一行你会得到一个错误提示:

ggplot(iris,map)
Error: No layers in plot

而这个错误和空参数的ggplot是一样的:

ggplot()
Error: No layers in plot

那么要怎么才能绘图呢?那就要提到ggplot的绘图策略了,下面让我们先看一下geom_*。会使用geom_*后你就可以开始画出一些想要的图像了。

亲,给点评论吧!