事情是酱紫的,本菜鸟刚才随手打开《现代统计图形》翻看了一下第10章 ggplot2 系统。在第253页有这样一段文字:
ggplot2 作图的基本语法框架是:
```
# 必选
ggplot() + geom_xxx() +
# 可选
scale_xxx()+
coordinate_xxx()+
facet_xxx()+
theme()+
···
```
即:数据映射+几何形状+可选项(坐标系+切片结构+主题+其他附加属性)。每个 + 两侧都是图层
这句“每个 + 两侧都是图层”我的理解是说,上面那段基本语法框架中提到的每个函数都是一个图层。这跟我原本对图层的理解有些不同。由于正好我最近也在写学习 ggplot2的笔记,这里贴一下我的理解,每一个绘制几何对象的函数都是一个图层,而像坐标系、标度、分面等函数只是用来修改图层中的一些图形属性映射的设定内容,具体如下。
ggplot2 有别于其他绘图包的最大特点是图层,关于图层这个概念,有几点需要梳理清楚。
其一,每一个几何对象都是一个图层,对应地,每个绘制几何对象的函数如 GEOM_FUNCTION()
都会创建一个图层,都有一个mapping = aes()
,这是设置图形属性映射的函数。
其二,除了 ggplot()
图层,各 GEOM_FUNCTION()
图层中的图形属性映射仅对本图层起作用。绘制一个最基本的 ggplot2 图形至少需要两个图层,一个 ggplot()
和一个 GEOM_FUNCTION()
,通常由前者引入数据集,由后者指定绘制的具体几何图形,比如绘制柱状图就是 geom_bar()
,绘制散点图就是 geom_point()
。需要注意的是,ggplot()
图层里面的映射属于全局映射,而 GEOM_FUNCTION()
图层里面的映射属于局部映射,但 GEOM_FUNCTION()
图层的映射优先级更高且设定内容只对本图层起作用。因此,当 ggplot()
和 GEOM_FUNCTION()
都设定了同一种图形属性的不同内容时,后者的设定会覆盖前者;而当某种图形属性在 ggplot()
中有设定而在 GEOM_FUNCTION()
中没有设定时,后者缺失的部分会直接引用前者设定的内容。
其三,除了绘制几何对象的函数,其他函数也可以修改图层中的图形属性,其优先级依+
号后面的函数编写顺序而定。
另外,由于上面那段基本语法框架中没有提到STAT_FUNCTION()
开头的一些统计变换函数,每个几何对象函数都有一个默认的统计变换,每个统计变换函数也有一个默认的几何对象,因此几何对象函数和统计变换函数有时可以互换使用。所以除了ggplot()
和GEOM_FUNCTION()
,STAT_FUNCTION()
也可以算作是创建几何对象的函数,也会创建图层。