《R数据科学》学习笔记|Note2:使用ggplot2进行数据可视化(上)

点击蓝字

关注我!

写在前面

本系列为《R数据科学》(R for Data Science)的学习笔记。相较于其他R语言教程来说,本书一个很大的优势就是直接从实用的R包出发,来熟悉R及数据科学。更新过程中,读者朋友如发现错误,欢迎指正。如果有疑问,也可以在评论区留言或后台私信。希望各位读者朋友能学有所得!

BOOK

1.1

简介

本章将教你如何使用 ggplot2 进行数据可视化。R 有好几种绘图工具,但 ggplot2 是其中最优雅、功能最全面的一个。ggplot2 实现了图形语法,这是一套用来描述和构建图形的连贯性语法规则。掌握 ggplot2 后,你便可以在多个场景中使用,从而显著提高工作效率。

准备工作

本章重点讨论 tidyverse 的一个核心 R 包——ggplot2。为了访问本章用到的数据集、帮助页面和函数,需要先运行以下代码来加载 tidyverse:

1library(tidyverse)
 1> library(tidyverse)
 2-- Attaching packages ----------------------------------------------------- tidyverse 1.3.0 --
 3√ ggplot2 3.3.3     √ purrr   0.3.4
 4√ tibble  3.0.4     √ dplyr   1.0.2
 5√ tidyr   1.1.2     √ stringr 1.4.0
 6√ readr   1.4.0     √ forcats 0.5.0
 7-- Conflicts -------------------------------------------------------- tidyverse_conflicts() --
 8x dplyr::filter() masks stats::filter()
 9x dplyr::lag()    masks stats::lag()
10Warning messages:
111: 程辑包‘tidyverse’是用R版本4.0.3 来建造的 
122: 程辑包‘tibble’是用R版本4.0.3 来建造的 
133: 程辑包‘tidyr’是用R版本4.0.3 来建造的 
144: 程辑包‘readr’是用R版本4.0.3 来建造的 
155: 程辑包‘dplyr’是用R版本4.0.3 来建造的 
166: 程辑包‘forcats’是用R版本4.0.3 来建造的

1.2

第一步

我们使用第一张图来回答问题:大引擎汽车比小引擎汽车更耗油吗?

1.2.1

mpg数据框

可以使用ggplot2 包中的mpg 数据框(即 ggplot2::mpg)来检验自己的答案。数据框是变量(列)和观测(行)的矩形集合。mpg 包含了由美国环境保护协会收集的 38 种车型的观测数据。

 1mpg
 2> mpg
 3# A tibble: 234 x 11
 4   manufacturer model      displ  year   cyl trans      drv     cty   hwy fl    class  
 5   <chr>        <chr>      <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>  
 6 1 audi         a4           1.8  1999     4 auto(l5)   f        18    29 p     compact
 7 2 audi         a4           1.8  1999     4 manual(m5) f        21    29 p     compact
 8 3 audi         a4           2    2008     4 manual(m6) f        20    31 p     compact
 9 4 audi         a4           2    2008     4 auto(av)   f        21    30 p     compact
10 5 audi         a4           2.8  1999     6 auto(l5)   f        16    26 p     compact
11 6 audi         a4           2.8  1999     6 manual(m5) f        18    26 p     compact
12 7 audi         a4           3.1  2008     6 auto(av)   f        18    27 p     compact
13 8 audi         a4 quattro   1.8  1999     4 manual(m5) 4        18    26 p     compact
14 9 audi         a4 quattro   1.8  1999     4 auto(l5)   4        16    25 p     compact
1510 audi         a4 quattro   2    2008     4 manual(m6) 4        20    28 p     compact
16# ... with 224 more rows

mpg 中包括如下变量。

• displ:引擎大小,单位为升。

• hwy:汽车在高速公路上行驶时的燃油效率,单位为英里 / 加仑(mpg)。与燃油效率高的汽车相比,燃油效率低的汽车在行驶相同距离时要消耗更多燃油。

1.2.2

创建ggplot图形

为了绘制 mpg 的图形,运行以下代码将 displ 放在 x 轴,hwy 放在 y 轴:

1ggplot(data = mpg) +
2  geom_point(mapping = aes(x = displ, y = hwy))

上图显示出引擎大小(displ)和燃油效率(hwy)之间是负相关关系。换句话说,大引擎汽车更耗油。

ggplot2 中,你可以使用 ggplot() 函数开始绘图。

ggplot() 创建了一个坐标系,你可以在它上面添加图层。ggplot() 的第一个参数是要在图中使用的数据集。

ggplot(data = mpg)会创建一张空白图,因为这张图没什么意思,所以就不在这里展示了。向 ggplot() 中添加一个或多个图层就可以完成这张图。

函数 geom_point() 向图中添加一个点层,这样就可以创建一张散点图。

ggplot2 中包含了多种几何对象函数,每种函数都可以向图中添加不同类型的图层。你将在本章中学到大量的几何对象函数。

ggplot2 中的每个几何对象函数都有一个 mapping 参数。这个参数定义了如何将数据集中的变量映射为图形属性。mapping 参数总是与 aes() 函数成对出现,aes() 函数的 x 参数和 y参数分别指定了映射到 x 轴的变量与映射到 y 轴的变量。ggplot2 在 data 参数中寻找映射变量,本例中就是 mpg。

1.2.3

绘图模板

我们将上面的代码转换为一个可重用的 ggplot2 绘图模板。要想生成一张图,将以下代码中的尖括号部分替换为数据集、几何对象函数或映射集合即可:

1ggplot(data = <DATA>) +
2  <GEOM_FUNCTION>(mapping = aes(<MAPPINGS>))

本章其余内容将向你展示如何完成并扩展这个模板,以制作出各种类型的图。我们将从<MAPPINGS> 部分开始。

1.2.4

练习

(1) 运行 ggplot(data = mpg),你会看到什么?

(2) 数据集 mpg 中有多少行?多少列?

(3) 变量 drv 的意义是什么?使用  ?mpg 命令阅读帮助文件以找出答案。

(4) 使用 hwycyl 绘制一张散点图。

(5) 如果使用 classdrv 绘制散点图,会发生什么情况?为什么这张图没什么用处?

1.3

图形属性映射

图形属性是图中对象的可视化属性,其中包括数据点的大小、形状和颜色。通过改变图形属性的值,可以用不同的方式来显示数据点。

通过将图中的图形属性映射为数据集中的变量,可以传达出数据的相关信息。例如,可以将点的颜色映射为变量 class,从而揭示每辆汽车的类型:

1ggplot(data = mpg) +
2 geom_point(mapping = aes(x = displ, y = hwy, color = class))

(也可以用colour 代替 color)。

要想将图形属性映射为变量,需要在函数 aes() 中将图形属性名称和变量名称关联起来。ggplot2 会自动为每个变量值分配唯一的图形属性水平(本例中是唯一的颜色),这个过程称为标度变换。ggplot2 还会添加一个图例,以表示图形属性水平和变量值之间的对应关系。

在上例中,我们将 class 映射为颜色,但也可以用同样的方式将其映射为点的大小。在下面的示例中,每个点的实际大小表示其所属的类别。这里我们收到一条警告信息,因为将无序变量(class)映射为有序图形属性(size)可不是好主意。

1ggplot(data = mpg) +
2  geom_point(mapping = aes(x = displ, y = hwy, size = class))
1Warning message:
2Using size for a discrete variable is not advised.

或者我们也可以将 class 映射为控制数据点透明度的 alpha 图形属性,还可以将其映射为点的形状。

1# 上图
2ggplot(data = mpg) +
3  geom_point(mapping = aes(x = displ, y = hwy, alpha = class))
4# 下图
5ggplot(data = mpg) +
6  geom_point(mapping = aes(x = displ, y = hwy, shape = class))
1Warning messages:
21: The shape palette can deal with a maximum of 6 discrete values because more than 6
3becomes difficult to discriminate; you have 7. Consider specifying shapes manually
4if you must have them. 
52: Removed 62 rows containing missing values (geom_point).

ggplot2 只能同时使用 6 种形状。默认情况下,当使用这种图形属性时,多出的变量值将不会出现在图中。

还可以手动为几何对象设置图形属性。例如,我们可以让图中的所有点都为蓝色:

1ggplot(data = mpg) +
2 geom_point(mapping = aes(x = displ, y = hwy), color = "blue")

• 颜色名称是一个字符串。

• 点的大小用毫米表示。

• 点的形状是一个数值,如图所示。

1.4

分面

添加额外变量的一种方法是使用图形属性。另一种方法是将图分割成多个分面,即可以显示数据子集的子图。这种方法特别适合添加分类变量。

要想通过单个变量对图进行分面,可以使用函数 facet_wrap()。其第一个参数是一个公式,创建公式的方式是在 ~ 符号后面加一个变量名(这里所说的“公式”是 R 中的一种数据结构,不是数学意义上的公式)。传递给facet_wrap()的变量应该是离散型的。

1ggplot(data = mpg) +
2  geom_point(mapping = aes(x = displ, y = hwy)) +
3  facet_wrap(~ class, nrow = 2)
4

要想通过两个变量对图进行分面,需要在绘图命令中加入函数 facet_grid()。这个函数的第一个参数也是一个公式,但该公式包含由 ~ 隔开的两个变量名

1ggplot(data = mpg) +
2  geom_point(mapping = aes(x = displ, y = hwy)) +
3  facet_grid(drv~ cyl)

如果不想在行或列的维度进行分面,你可以使用 . 来代替变量名,例如 :

1ggplot(data = mpg) +
2  geom_point(mapping = aes(x = displ, y = hwy)) +
3  facet_grid(.~ cyl)

— END —

往期 · 推荐

《R数据科学》学习笔记|Note1:绪论

零基础"机器学习"自学笔记|Note6:正规方程及其推导(内附详细推导过程)

零基础"机器学习"自学笔记|Note5:多变量线性回归

零基础"机器学习"自学笔记|Note6:正规方程及其推导(内附详细推导过程)

欢迎关注 木舟笔记

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值