ggplot2是R语言中四大著名绘图框架之一,且因为其极高的参数设置自由度和图像的美学感,即使其绘图速度不是很快,但丝毫不影响其成为R中最受欢迎的绘图框架;ggplot2的作者是现任Rstudio首席科学家的Hadley Wickham,ggplot2基于Leland Wilkinson在Grammar of Graphics(图形的语法)中提出的理论,取首字母缩写再加上plot,于是得名ggplot,末尾的2是因为Hadley写包的一个习惯——对先前的版本不满意便写一个新版本的名称不变仅在末尾加上2,如reshape2等;
按照《图形的语法》一书中的观点,一张统计图形就是从数据到点、线或方块等几何对象的颜色、形状或大小等图形属性的一个映射,其中还可能包含对数据进行统计变换(如求均值或方差),最后将这个映射绘制在一定的坐标系中就得到了我们需要的图形。图中可能还有分组,就是生成关于数据的不同子集的图形。使用ggplot2绘图的过程就是选择合适的几何对象、图形属性和统计变换来充分暴露数据中所含有的信息的过程。
用惯了基础的绘图函数之后,突然转到ggplot2的绘图风格,或多或少会有些摸不着头脑,因此我们先从ggplot2中的qplot方法开始,这是一种语法规则和参数设置介于常规plot与ggplot2之间的一种绘图函数;
与plot相似,qplot()的基本参数是x、y,分别代表所要绘制图像的x轴与y轴,并且为了和数据框高度契合(我也十分鼓励将变量都放进数据框中规整起来),qplot还提供了参数data,控制传入的数据框名称,这样在qplot()中涉及数据框中变量的参数就可以直呼其名而不用加$;
在介绍qplot能够绘制的其他几何图像之前,我们先来理解一下其默认的模式——绘制散点图,以ggplot2中自带数据集diamonds作为示例,这是一个关于50000多颗圆切钻石各个指标的数据集。
变量名 变量说明
price 钻石价格
carat 钻石重量
cut 钻石切削水平
color 钻石颜色
clarity 钻石的透明度
x 钻石长度
y 钻石宽度
z 钻石高度
depth 深度百分比
table 钻石正上顶点距离最宽顶点距离
ggplot2的图形图层语法
图形图层语法是ggplot2的语法基础,它使得图形的重复更新变得更简单灵活,在遇到新问题时也许只需要照搬之前堆砌成的一个优美图形全部代码再稍加修改即可直接使用。
通过ggplot()用图层来构建图像
前面我们依次介绍了ggplot2图层语法中的各种主要结构,但仅使用了qplot()进行绘图,其局限性是只能使用在qplot()中定义的一个数据集和对应的一组图形属性映射,若希望将不同的数据通过不同的图层构建方式来展现在一张图上,就需要使用ggplot()函数,该函数有两个主要的参数,对应了数据和图形属性映射,这两个参数将作为接下来绘图的默认参数,直到在新加的图层中设定了新的参数,默认值才会被修改‘;其中,数据指定绘图所使用的默认数据框且必须是数据框;映射的设定则与qplot非常相似,只需要将图形属性和变量名放到函数aes()内即可,但要注意,这里不像qplot默认的图层为散点图,使用ggplot时如果不+geom_部分,则没有图层会被创建。