ggplot2语法突破

简介

本文主要对ggplot2的语法和组成部件做一个总结,gglot2的理论基础是图形图层语法。图层语法定义的图由以下几部分组成:

  • 一个默认的数据集和一组从变量到图形属性的映射
  • 一个或多个图层,每个都是由一种几何对象、一种统计变换和一种位置调整组成,另外数据集和图形属性映射也是可选的;
  • 标度,每个图形属性映射都对应一个标度;
  • 一个坐标系统;
  • 分面设定。

一句话来总结就是一个图形对象就是一个包含数据映射图层标度坐标分面的列表。

绘图举例

数据集

选用gglpot2自带的耗油量数据集mpg。下表列出mpg中的前10行数据,cty和hwy分别记录了城市和高速公路驾驶时的耗油量(英里每加仑,mpg),displ表示发动机排量(以升为单位)

id

代码实现及原理解释

qplot(displ, hwy, data = mpg, colour = factor(cyl))

id
首先,ggplot2做的是将图形属性映射为一个变量或常数,在上图中,点的水平位置(x)映射的是变量displ,点的竖直位置映射的是变量hwy,变量cyl则是控制点的颜色,其他没有指定的比如点的大小和形状则使用的是默认值(常数)。

其次,映射完成后,就需要把那些数值转换为计算机可识别的物理单位(如像素和颜色),这个转换的过程就是标度变换。在上面的例子中,水平位置和竖直位置直接将数据的范围映射到坐标轴的范围中就可以了,而颜色需要转换为一个三维的颜色空间才能确定颜色的值。

最后,渲染数据就可以生成能在屏幕上展示的图形对象了。

下面再看一个稍微复杂一点的例子。

qplot(displ, hwy, data = mpg, facets = .~year) + geom_smooth()

id

这幅图与上一幅图比较增加了分面,多个图层和统计量。

分面和图层将原数据切割成多个小数据集,即每个图层的每个分面面板都含有一个小数据集。

统计量指的是这幅图中增加了一个平滑曲线层,它没有展示元数据,而是展示了统计变换后的数据。与上面的步骤相比就加了一个环节:将数据映射到图形属性后,要对其进行统计变换(即处理数据)。

因为添加了统计变换,所以在进行标度变换时需要添加步骤。标度变换实际上出现在三个地方:标度转换,标度训练和标度映射。

  • 标度转换在统计变换前面,因此统计量都是基于标度变换后的数据计算的。
  • 计算完成后,所有分面和图层的数据集中的每个标度都会被“训练”。标度训练将根据所有小数据集里的数据的范围得到整体数据的范围。
  • 最后,标度映射将数据映射到图形属性中。

ggplot2绘图过程图解

id

每个正方形代表一个图层,本土图展示了一个含有三个图层和三个分面面板的图。除了标度训练部对数据框做变换,其他步骤都对每个小数据集做变换。

参考文献

[1][ggplot2:数据分析与图形艺术]