按照个人要求的格式来创建含有研究信息的数据集,这是任何数据分析的第一步。在 R 中,这个任务包括以下两步:
- 选择一种数据结构来存储数据;
- 将数据输入或导入到这个数据结构中。
mpg 数据框(Data Frame)
mpg 是 ggplot2 包的一个内置数据框;mpg 包含1999-2008年38款热门车型的燃油经济性数据。这个数据集包含了EPA提供的燃油经济性数据的一个子集。它只包含1999年至2008年间每年都有新版本的车型——这是用来代表这款车的受欢迎程度的。mpg 的格式为包含234行和11个变量的数据框:
> install.packages("tidyverse")
> library(tidyverse)
> library(ggplot2)
> dim(mpg)
[1] 234 11
> mpg[1:10,]
# A tibble: 10 x 11
manufacturer model displ year cyl trans drv cty hwy fl class
<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
1 audi a4 1.8 1999 4 auto(~ f 18 29 p comp~
2 audi a4 1.8 1999 4 manua~ f 21 29 p comp~
3 audi a4 2 2008 4 manua~ f 20 31 p comp~
4 audi a4 2 2008 4 auto(~ f 21 30 p comp~
5 audi a4 2.8 1999 6 auto(~ f 16 26 p comp~
6 audi a4 2.8 1999 6 manua~ f 18 26 p comp~
7 audi a4 3.1 2008 6 auto(~ f 18 27 p comp~
8 audi a4 qu~ 1.8 1999 4 manua~ 4 18 26 p comp~
9 audi a4 qu~ 1.8 1999 4 auto(~ 4 16 25 p comp~
10 audi a4 qu~ 2 2008 4 manua~ 4 20 28 p comp~
不同的行业对于数据集的行和列叫法不同。统计学家称它们为观测(observation) 和变量(variable);数据库分析师则称其为记录(record)和字段(field); 数据挖掘和机器学习中把它们叫作示例(example)和属性(attribute).
变量
- 制造商(manufacturer): 制造商名称
- 型号(model):型号名称
- 发动机排量(displ): 发动机排量(升)
- 年份(year): 制造年份
- 气缸(cyl): 气缸数
- 变速器(trans): 变速器类型
- 传动系的类型(drv):其中f=前轮驱动,r=后轮驱动,4=四轮驱动
- 城市(cty):汽车在城市道路上行驶时的燃油效率,单位为英里/加仑(mpg).
- 高速公路(hwy):汽车在高速公路上行驶时的燃油效率,单位为英里/加仑(mpg). 与燃油效率高的汽车相比,燃油效率低的汽车在行驶相同距离时要消耗更多燃油。
- 燃料(fl): 燃料类型
- 类型(class): 汽车“类型”
要想了解更多关于数据框 mpg 的信息,可以使用
> ?mpg
打开其帮助页面。
创建 ggplo2 图形
ggplot2 是一个用来绘制统计图形(或称为数据图形)的 R 软件包。与其他大多数的图形软件包不同, ggplot2 是通过其背后的一套图形语法所支持的。这一语法基于 Wilkinson L (2005) The grammar of graphics. Statistics and computing, 2nd edn. Springer, New York 一书,它由一系列独立的图形部件(independent components)组成,并能以许多种不同的方式组合起来。这一点使得 ggplot2 的功能非常强大,因为它不会局限于一些已经定义好的统计图形,你可以根据你自己的需要针对具体问题量身定做图形。这听起来似乎有些困难,但实际上只需要掌握一些核心准则以及少许特例,ggplot2 还是很容易学习的。
ggplot2 可以绘制出很多美观的图形,同时能避免诸多繁琐的细节,例如绘制图例(legends)等。用 ggplot2 绘图时,图形的每个部分可以依次进行构建,之后还可以进行编辑。ggplot2 精心挑选了一系列预设方法,因此在大部分的情形下你可以快速地绘制出许多高质量的图形。如果在版式上还有特殊要求,也可以利用 ggplot2 中详尽的主题系统(theming system) 来进行定制。这样你就不需要花太多时间来调整图形的外观,可以更加专注地用图形来展示你的数据。
ggplot2 被设计为可迭代式地工作。你可以从展示原始数据(raw data)的图层(layer)开始,不断地添加包含注释和统计摘要的图层。这种绘图方式与你在做分析和设计时的结构化思维是一致的,它能缩短你脑中“所思”和页面上“所见”的距离。
学习图形语法(grammar of graphics) 不仅可以帮助你绘制出你已经了解的图形,还可以启发你做出更佳的图形方案。如果没有这一套语法体系,图形的绘制便失去了理论支持,这也就是为什么现有的很多图形包(graphic packages) 只是一系列特例的堆积。
为了绘制 mpg 的图形,运行以下代码将发动机排量(displ) 放在 x 轴,汽车在高速公路上行驶时的燃油效率(hwy) 放在 y 轴:
上图显示发动机排量(displ) 和汽车在高速公路上行驶时的燃油效率(hwy) 之间是负相关关系。换句话说,排量大的汽车更耗油。这张图是证实了你对燃油效率和发动机排量之间关系的假设还是推翻了它?
在 ggplot2 中,你可以使用 ggplot() 函数开始绘图。 ggplot() 创建了一个坐标系,你可以在它上面添加图层。ggplot() 的第一个参数是绘图时要是用的数据集。
> ggplot(data=mpg) #创建一张空白图
ggplot(data=mpg) 会创建一张空白图
向 ggplot() 中添加一个或多个图层就可以完成这张图。函数 geom_poin() 向图中添加一个点层,这样就可以创建一张散点图:
ggplot2 中包含了多种几何对象函数(geom functions),每种函数都可以向图中添加不同类型的图层。
ggplot2 中的每个几何对象函数(geom functions) 都有一个 mapping 参数。这个参数定义了如何将数据集中的变量映射为图形属性。mapping 参数总是与 aes() 函数成对出现, aes() 函数的 x 参数和 y 参数分别指定了映射到 x 轴的变量与映射到 y 轴的变量。 ggplot2 在 data 参数中寻找被映射的变量,本例中就是 mpg.
绘图模板
我们将上面的代码转换为一个可重复使用的 ggplot2 绘图模板。要想生成一张图,将以下代码中的<尖括号部分>替换为数据集、几何对象函数(geom functions)或映射集合(mappings) 即可:
# ggplot(data=<DATA>)+<GEOM_FUNCTION>(mapping=aes(<MAPPINGS>))