《qqplot2: 数据分析与图形艺术》第3章学习笔记
title: "《qqplot2: 数据分析与图形艺术》学习笔记2"
author: "wintryheart"
date: "2019年5月11日"
output:
html_document:
toc: TRUE
toc_float: TRUE
knitr::opts_chunk$set(echo = TRUE, warning = FALSE)
注意:本笔记使用的R的版本为3.6.0。
第3章 语法突破
3.2 耗油量数据
ggplot2包中的mpg数据集记录美国1999年和2008年部分汽车耗油量数据。变量包括:
变量名 | 含义 | 中文意思 |
---|---|---|
manufacturer | 制造商 | |
model | model name | 型号 |
displ | engine displacement, in litres | 发动机排量 |
year | year of manufacture | 制造年份 |
cyl | number of cylinders | 汽缸数 |
trans | type of transmission | 传动类型 |
drv | f = front-wheel drive, r = rear wheel drive, 4 = 4wd | 驱动类型 |
cty | city miles per gallon | 城市耗油量 |
hwy | highway miles per gallon | 高速耗油量 |
fl | fuel type | 燃油类型 |
class | "type" of car | 车型 |
library(ggplot2)
library(gridExtra)
data(mpg)
head(mpg)
也可以调用其它包,把R数据整理成通用表格形式。常用的有stargazer包,knitr包和xtable包。
要调用其它包改变表格输出,首先要设置knitr的results参数,results='asis'。
results参数选项 | 含义 | 中文意思 |
---|---|---|
hide | not display the code’s results | 不显示结果 |
hold | delay displaying | 延迟输出直至组块结束 |
markup | mark up the results | 默认值,装裱输出 |
asis | pass through results without reformatting them | 原样输出 |
t1 <- mpg[1:6, ] #只展示前6个样本。
stargazer::stargazer(t1, summary=FALSE, type="html", title = "Table with stargazer") #stargazer输出的表格太过紧凑,并不好看。注意stargazer默认输出summary statistics,如果要显示原始数据,要把参数summary设置为FASLE。
knitr::kable(t1, caption = "Table with kable") #knitr包的kable输出的是markdown格式的表格
print(xtable::xtable(t1, caption="Table with xtable"), type="html") #xtable包的xtablel输出的表格也太紧凑。不好看。
manufacturer | model | displ | year | cyl | trans | drv | cty | hwy | fl | class |
---|---|---|---|---|---|---|---|---|---|---|
audi | a4 | 1.8 | 1999 | 4 | auto(l5) | f | 18 | 29 | p | compact |
audi | a4 | 1.8 | 1999 | 4 | manual(m5) | f | 21 | 29 | p | compact |
audi | a4 | 2.0 | 2008 | 4 | manual(m6) | f | 20 | 31 | p | compact |
audi | a4 | 2.0 | 2008 | 4 | auto(av) | f | 21 | 30 | p | compact |
audi | a4 | 2.8 | 1999 | 6 | auto(l5) | f | 16 | 26 | p | compact |
audi | a4 | 2.8 | 1999 | 6 | manual(m5) | f | 18 | 26 | p | compact |
3.3散点图
qplot(displ, hwy, data=mpg, color=factor(cyl))
scatter-1.png
图形属性与数据的映射
-
在散点图中,每个观测数据都用一个点来表示,点的位置由两个变量的值决定。
-
每个点不仅有横坐标和纵坐标,还有大小、颜色和形状。这些属性称之为图形属性(aesthetics)。
-
每个图形属性都可以映射为一个变量或者设定成一个常数。
-
上图中,变量displ控制点的水平位置,变量hwy控制点的竖直位置,变量cyl控制点的颜色。
-
而点的大小和形状都没有指定映射的变量,使用的默认值(常数)。
几何对象
- 点(points)、线(lines)和条(bars)都是几何对象(geom)的具体形式。
- 几何对象决定了图形的类型(type)。
- 复杂的图形可以有由多种几何对象组成。
标度变换
-
把数据单位(如升、加仑和汽缸数)转换成电脑可以识别的物理单位(如像素和颜色)的转换过程,称之为标度变换(scaling)。
-
转换后的数据对我们而言可能没有意义,但对电脑而言却是可识别的:
- 颜色用6个字母组成的十六进制字符表示,如#FF6C91。
- 大小和形状分别用数字和整数来表示。
-
上图中,我们有三个图形属性需要进行标度变换:水平位置(x)、竖直位置(y)和颜色。
-
如何根据点的位置(x和y)来确定它在图中的位置,由坐标系统(Coord)决定。大多数情况,使用笛卡尔坐标系,但有时也会用极坐标系或球投影。
-
颜色变换是将数据的值映射到一个由三原色组成的三维的颜色空间中。
-
最后对这些数据渲染,生成上展示的图形对象。
综上,绘制一个完整的图形,我们需要组合三类图形对象:
- 数据, 由点来表示;
- 标度和坐标系, 用来生成坐标轴和图例;
- 图形注释, 如背景和标题。
3.4 更复杂的图形示例
- 三种新的组件:分面、多个图层和统计量。
- 每个图层的每个分面面板(facet panel)都含一个小数据集。
- 平滑曲线层展示了统计变换后的数据。
qplot(displ, hwy, data = mpg, facets = .~year) + geom_smooth()
facet-1.png
3.5 图层语法的组件
图层语法所定义的图由以下几部分组成:
- 一个默认的数据庥和一组从变量到图形属性的映射;
- 一个或多个图层,每个都由一种几何对象、一种统计变换和一种位置调整组成;
- 标度,每个图形属性映射都对应一个标度;
- 一个坐标系统;
- 分面设定。
3.6 数据结构
- 一个图形对象就是一个包含数据、映射、图层、标度、坐标和分面的列表。
- 图形对象还有一个组件:options,专门用来存储特定的图形主题选项。
- 绘图有两种方式:
- “一步到位”式,qplot();
- “逐层叠加”式,ggplot()+图层函数
当我们得到一个图形对象时,可以进行如下处理:
- print()将其呈现在屏幕上。交互式操作时,print()会自动被调用,但在循环和函数里,需要手动输入print();
- ggsave()保存到磁盘;
- summary()查看它的结构;
- save()保存缓存副本到磁盘;可以用load()调用重现图形。