点击蓝字

关注我!

写在前面

本系列为《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.44√ tibble  3.0.4     √ dplyr   1.0.25√ tidyr   1.1.2     √ stringr 1.4.06√ readr   1.4.0     √ forcats 0.5.07-- 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 种车型的观测数据。

 1mpg2> mpg3# A tibble: 234 x 114   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     compact7 2 audi         a4           1.8  1999     4 manual(m5) f        21    29 p     compact8 3 audi         a4           2    2008     4 manual(m6) f        20    31 p     compact9 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:正规方程及其推导(内附详细推导过程)

欢迎关注 木舟笔记

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

  1. Oracle中用system存数据,【学习笔记】Oracle表空间 数据存放system表空间影响数据库性能...

    天萃荷净 分享一篇,关于Oracle数据库system表空间研究,不能将用户数据存放在system表空间的原因 为什么不建议客户把业务数据存放到SYSTEM表空间中,一直想通过试验的数据来说明问题,今 ...

  2. (数据科学学习手札37)ggplot2基本绘图语法介绍

    一.简介 ggplot2是R语言中四大著名绘图框架之一,且因为其极高的参数设置自由度和图像的美学感,即使其绘图速度不是很快,但丝毫不影响其成为R中最受欢迎的绘图框架:ggplot2的作者是现任Rstu ...

  3. Python数据科学学习笔记之——机器学习专题

    机器学习专题 1.专题:朴素贝叶斯分类 1.1.朴素贝叶斯分类 朴素贝叶斯分类器建立在贝叶斯分类方法的基础上,其数学基础是贝叶斯定理--一个描述统计量条件概率关系的公式.在贝叶斯分类中,我们希望确定一 ...

  4. 数据治理学习笔记(一):数据治理是什么,要做什么

    前言: 经常在各种数据工作的文章中看到这个词,看词语意思就是要把数据管理好.作为数据基础支撑工作,其重要性也是可以想象的,平时工作中,有数据问题,一圈查下来就是一条记录的质量问题,更坑的是可能会多次都 ...

  5. Python数据科学学习笔记之——Matplotlib数据可视化

    Matplotlib 数据可视化 1.Matplotlib 常用技巧 1.1.导入 Matplotlib import matplotlib as mpl import matplotlib.pypl ...

  6. python sci数据_scanpy学习笔记:用Python分析单细胞数据

    Scanpy 是一个基于 Python 分析单细胞数据的软件包,内容包括预处理,可视化,聚类,拟时序分析和差异表达分析等.本文翻译自 scanpy 的官方教程 Preprocessing and cl ...

  7. R语言小白学习笔记3—R语言读取数据

    R语言小白学习笔记3-R语言读取数据 笔记链接 想说的话 学习笔记3-R语言读取数据 3.1 读取CSV文件 3.1.1 read_delim函数 3.1.2 fread函数 3.2 读取Excel数 ...

  8. DAMA数据治理学习笔记-大数据和数据科学

    大数据和数据科学 定义 对多种不同类型的数据进行收集(大数据)和分析(数据科学.分析.可视化),以此来为在分析的初始阶段未知的问题找到答案 目标 发现数据和业务的联系 支持将数据源迭代集成到企业中 发 ...

  9. R语言小白学习笔记12—概率分布

    R语言小白学习笔记12-概率分布 笔记链接 学习笔记12-概率分布 12.1 正态分布 12.2 二项分布 12.3 泊松分布 12.4 其他分布 笔记链接 学习笔记1-R语言基础. 学习笔记2-高级 ...

  10. R语言小白学习笔记13—基本统计

    R语言小白学习笔记13-基本统计 笔记链接 学习笔记13-基本统计 13.1 概括性统计量 13.2 相关系数和协方差 13.3 t-检验 13.3.1 单样本t检验 13.3.2 两样本t检验 13 ...

最新文章

  1. python装饰器功能是冒泡排序怎么做_传说中Python最难理解的点|看这完篇就够了(装饰器)...
  2. 3.1.10 OS之基本分段存储管理(段表、地址变换、信息共享)
  3. 技术中国论坛版本升级了!
  4. java应用uploadify 3.2丢失session
  5. linux 路由添加
  6. Javascript第五章document对象获取标签节点-第六课
  7. Problem J: 零起点学算法89——程序设计竞赛
  8. 复旦大学《高等代数学习指导书(第三版)》前言
  9. 系泊系统悬链线matlab,基于悬链线方程的系泊系统状态分析
  10. 无线通信网络学习之LTE网络架构篇(20141208)
  11. Kaggle账号的注册
  12. The requested URL was not found on this serve
  13. 华三imc服务器型号,华三imcportal服务器常见错误分析报告.doc
  14. [盘点]现今热门的h5网游
  15. 01笔记 数字逻辑基础——逻辑代数基础——基于《数字逻辑基础》陈光梦(第三版)
  16. static修饰符和final修饰符
  17. OushuDB入门(四)——数仓架构篇
  18. Civil 纵断面 profile 标签样式ProfileLabelStyleSet 异常处理
  19. CDH6.3 failure: repodata/repomd.xml from cloudera-manager: [Errno 256] No more mirr
  20. 带权并查集【bzoj3362】: [Usaco2004 Feb]Navigation Nightmare 导航噩梦

热门文章

  1. 中职学校计算机大赛方案,中等职业学校电子技能赛的活动策划方案参考
  2. JavaScript实现点击一下显示,再点击一下隐藏的功能(使用工厂函数)
  3. 燃油经济性加速时间曲线matlab,汽车理论课后习题Matlab程序详解
  4. android 手机本地(office、word)文件预览
  5. 每日习字|2020-05-30
  6. 【idea基础知识】idea在merge时颜色不同的各个区块代表的意思
  7. qq空间留言板删除 php,怎么批量删除QQ空间的说说
  8. 《算法竞赛进阶指南》荷马史诗
  9. 如何查看电脑ip和端口
  10. 通过UA判断手机的类型