ggplot2:语法介绍

1 简介

在这里插入图片描述
对于一般的作图人员来说,使用qplot()函数,就能满足大部分做图需求了。但如果你想理解ggplot2的作图精髓,设计出更复杂的图形,则需要深入了解ggplot2的作图语法,了解ggplot2作图的基本图形结构。

ggplot2图层语法主要基于Wilkinson(2005,2010)创建的图形语法,Wilkinson的图形语法简单归纳为:数据、几何对象、图形属性、统计变换、坐标系5个部分组成了一个统计图形,也就是我们所理解的数据图表。ggplot2在图形语法的基础上增加了许多新的功能,使图形能够在R环境下完美表现。

本文主要讲述了ggplot2绘制图形的过程,并介绍了绘图过程中设涉及的语法组成部分,最后介绍了如何将图形组建映射成R的数据结构。

2 数据说明

耗油量数据
下表列出了耗油量数据mpg的一个样本。该数据记录了美国1999年和2008年部分汽车的制造厂商、型号、类别、引擎大小、传动系、耗油量等信息。该数据包含38种型号的汽车。该数据来源于EPA燃油经济性网站,http://fueleonmy.gov,当然该数据已经被收纳进了ggplot2包内,使用者加载ggplot2包后,可直接对该数据进行分析。
在这里插入图片描述
该数据集隐含了许多问题。比如引擎大小与耗油量有什么关系?是不是某些汽车商比其它的汽车制造商更关注汽车的蚝油量?耗油量在过去的十几年有没有明显增加?本节我们将尝试回答第一个问题,并在此过程中学习更多关于绘制散点图的细节。

3 绘制散点图

下图解答了引擎大小与耗油量之间的关系。在这里,我们可以绘制两个连续变量的散点图(发动机的排量和高速公路每加仑行驶的英里数),图中点的颜色是由第三个变量(汽缸数目决定的),当然可以很容易的利用qplot()绘制它。

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

在这里插入图片描述
如果你画过散点图,那么你一定知道在散点图中,每个观测样本都由一个点表示,而点的位置又由变量的取值大小决定。除了决定散点位置的横纵坐标外,还有诸如图形的颜色、大小、形状等熟悉,我们称之为图形熟悉。 每个图形熟悉都可由一个变量来表示,例如在上图中,dispi控制着图形的横坐标,hwy控制着图形的纵坐标,而散点的颜色则由cyl控制,其它属性(形状、大小)则由常数控制。

在散点图中,我们用点来表示每个样本观测,若改用直线连接所有观测,就会得到折线图;若用条形来表示样本观测,则会变成柱形图,如下图所示。

ggplot(data = mpg, aes(x=displ, y=hwy, colour = factor(cyl)))+geom_line()

在这里插入图片描述

ggplot(mpg, aes(displ, hwy, colour = factor(cyl))) + geom_bar(stat = “identity”, position = “identity”, fill = NA)

在这里插入图片描述

上图中显示的点、线、柱形都被称为图形的几何对象(geom)。几何对象决定了图形的类型,通常简单的图形都只含有一个几何对象,但如果需要绘制复杂图形,则需要引入多个几何对象。例如我们可以在散点图上添加分组回归线,如下图所示。

qplot(displ, hwy, data = mpg, colour = factor(cyl)) + geom_smooth(data = subset(mpg, cyl != 5), method = “lm”)

在这里插入图片描述

对于计算机而言,我们输入的数据集没有任何意义。因此我们还需要将它们从数据单位(升、汽缸数、英里每加仑)转换成电脑可读的物理单位(像素、颜色等),我们将这种变换称之为刻度变换。转换后对我们来说可能没意义,但是对于电脑来说却是可识别的。

在上面的散点图中,有三个图形属性需要进行刻度变换的,它们分别是水平位置(X)、竖直位置(Y)和颜色。位置变换一般默认线性变换,只需要将数据范围映射在[0,1]上,因为ggplot2包调用的绘图系统grid包会帮我们处理好最终的细节。最后一点是根据确定好点的位置,来确定它们在图中的位置,这是由坐标系统(coord)决定的。 在ggplot2中,我们一般默认选择笛卡尔坐标系,但有时我们也可以选择极坐标系或用地图中的球投影。

4 绘制复杂的图形

下面我们在看一个更复杂的图形。这个图形增加了三个新的组件:分面、多个图层、统计量。 分面和图层将数据切分成了多个数据集,每个图层的每个分页都有一个不通的数据集,我们可以对不通数据集在不通图层、分页上进行可视化比较。

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

在这里插入图片描述

图中展示的图层中,除了散点图,还有平滑曲线。带有平滑曲线的图层并没有展示原始数据,而是对数据做了统计变换后,在展示在图层上面。展示这类图层前,一般需要先对数据进行统计变换(本例中拟合了一条平滑曲线),然后再根据平滑曲线返回指定点的预测值,最后再将确定好的数据及坐标展示在图层上面。

因为添加了统计变换,所以在做标度变换时需要增加额外的一些步骤。因为分页、图层的原因,数据会被分割成许多小数据集,所以要保证统计变换在不同小数据集里具有相同的变换尺度。

  • 标度转换,在统计变换前,需要先进行标度转换,以确保统计变换能够在标度转换后进行计算。

  • 计算完统计变换后,数据集映射出的每个标度可以进行“训练”,最后拟合光滑的曲线。 标度训练需要根据各子数据集的数据范围的到总体数据的数据范围,这样可以确保数据标度在全局范围内都有意义。

  • 最后通过标度影射,将数据影射到相应的图层上。

5 ggplot2语法的基本构成

在上面的例子中,我们已经介绍了数据、图层、属性、映射、标度、分页、坐标系等组成部分,还有一个重要构成是位置调整,它控制着图形对象的重叠。数据、映射、统计变化、几何形状、位置调整共同组成了一个图层。一个图形可以同时含有多个图层,一般而言,一个图形由如下几个要素构成:

  • 一个数据,一组从变量到图形属性的映射
  • 一个或多个图层
  • 标度
  • 坐标系
  • 分面设定
  • 图层

图层的作用是生成在图像上可以被人感知的对象。一个图层由四个部分组成:

  • 图形和数据属性映射
  • 一种统计变化
  • 一种几何对象
  • 一种位置调整方式
  • 标度

标度控制数据到图形属性的映射,并且图形上每一个属性都对应着一个标度。每一个标度都作用在图形中所有的数据,确保数据到图形属性的一致性。下图显示了几种标度的示例。

在这里插入图片描述

坐标系

坐标系(coord)可以将对象位置映射到图形平面上。位置一般由两个坐标(X,Y)决定。ggplot2通常默认的笛卡尔坐标系需要二维坐标,极坐标或者其它坐标系则用的相对少,相关的资料文档也不多。下图是三个常见的坐标系示例,分别是笛卡尔(Cartesian)、半对数(semi-log)和极、坐标系(polar)。

在这里插入图片描述

坐标系变换通常会影响图形的外观,但与标度不通的是,坐标系变换在统计变换之后,而标度变换则在统计变换之前进行。

6 ggplot2的数据结构

一个图形对象就是一个包涵数据、映射、图层、标度、坐标、分面的列表。当我们用ggplot()逐层作图,得到一个图形对象后,通常有如下几种处理方式:

用print()函数使图形对象呈现在屏幕上。在交互操作时,print()函数会自动被调用,但是在循环作图时,需要用户手动执行。

用ggsave()函数将其保存在磁盘上。

用summary()查看对象的结构。

用save()函数将它的缓存副本保存在磁盘上。


更多内容,关注R友舍微信号

在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值