《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.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) 使用 hwy 和 cyl 绘制一张散点图。
(5) 如果使用 class 和 drv 绘制散点图,会发生什么情况?为什么这张图没什么用处?
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进行数据可视化(上)相关推荐
- Oracle中用system存数据,【学习笔记】Oracle表空间 数据存放system表空间影响数据库性能...
天萃荷净 分享一篇,关于Oracle数据库system表空间研究,不能将用户数据存放在system表空间的原因 为什么不建议客户把业务数据存放到SYSTEM表空间中,一直想通过试验的数据来说明问题,今 ...
- (数据科学学习手札37)ggplot2基本绘图语法介绍
一.简介 ggplot2是R语言中四大著名绘图框架之一,且因为其极高的参数设置自由度和图像的美学感,即使其绘图速度不是很快,但丝毫不影响其成为R中最受欢迎的绘图框架:ggplot2的作者是现任Rstu ...
- Python数据科学学习笔记之——机器学习专题
机器学习专题 1.专题:朴素贝叶斯分类 1.1.朴素贝叶斯分类 朴素贝叶斯分类器建立在贝叶斯分类方法的基础上,其数学基础是贝叶斯定理--一个描述统计量条件概率关系的公式.在贝叶斯分类中,我们希望确定一 ...
- 数据治理学习笔记(一):数据治理是什么,要做什么
前言: 经常在各种数据工作的文章中看到这个词,看词语意思就是要把数据管理好.作为数据基础支撑工作,其重要性也是可以想象的,平时工作中,有数据问题,一圈查下来就是一条记录的质量问题,更坑的是可能会多次都 ...
- Python数据科学学习笔记之——Matplotlib数据可视化
Matplotlib 数据可视化 1.Matplotlib 常用技巧 1.1.导入 Matplotlib import matplotlib as mpl import matplotlib.pypl ...
- python sci数据_scanpy学习笔记:用Python分析单细胞数据
Scanpy 是一个基于 Python 分析单细胞数据的软件包,内容包括预处理,可视化,聚类,拟时序分析和差异表达分析等.本文翻译自 scanpy 的官方教程 Preprocessing and cl ...
- R语言小白学习笔记3—R语言读取数据
R语言小白学习笔记3-R语言读取数据 笔记链接 想说的话 学习笔记3-R语言读取数据 3.1 读取CSV文件 3.1.1 read_delim函数 3.1.2 fread函数 3.2 读取Excel数 ...
- DAMA数据治理学习笔记-大数据和数据科学
大数据和数据科学 定义 对多种不同类型的数据进行收集(大数据)和分析(数据科学.分析.可视化),以此来为在分析的初始阶段未知的问题找到答案 目标 发现数据和业务的联系 支持将数据源迭代集成到企业中 发 ...
- R语言小白学习笔记12—概率分布
R语言小白学习笔记12-概率分布 笔记链接 学习笔记12-概率分布 12.1 正态分布 12.2 二项分布 12.3 泊松分布 12.4 其他分布 笔记链接 学习笔记1-R语言基础. 学习笔记2-高级 ...
- R语言小白学习笔记13—基本统计
R语言小白学习笔记13-基本统计 笔记链接 学习笔记13-基本统计 13.1 概括性统计量 13.2 相关系数和协方差 13.3 t-检验 13.3.1 单样本t检验 13.3.2 两样本t检验 13 ...
最新文章
- python装饰器功能是冒泡排序怎么做_传说中Python最难理解的点|看这完篇就够了(装饰器)...
- 3.1.10 OS之基本分段存储管理(段表、地址变换、信息共享)
- 技术中国论坛版本升级了!
- java应用uploadify 3.2丢失session
- linux 路由添加
- Javascript第五章document对象获取标签节点-第六课
- Problem J: 零起点学算法89——程序设计竞赛
- 复旦大学《高等代数学习指导书(第三版)》前言
- 系泊系统悬链线matlab,基于悬链线方程的系泊系统状态分析
- 无线通信网络学习之LTE网络架构篇(20141208)
- Kaggle账号的注册
- The requested URL was not found on this serve
- 华三imc服务器型号,华三imcportal服务器常见错误分析报告.doc
- [盘点]现今热门的h5网游
- 01笔记 数字逻辑基础——逻辑代数基础——基于《数字逻辑基础》陈光梦(第三版)
- static修饰符和final修饰符
- OushuDB入门(四)——数仓架构篇
- Civil 纵断面 profile 标签样式ProfileLabelStyleSet 异常处理
- CDH6.3 failure: repodata/repomd.xml from cloudera-manager: [Errno 256] No more mirr
- 带权并查集【bzoj3362】: [Usaco2004 Feb]Navigation Nightmare 导航噩梦