Build a Plot Layer by Layer
5.1 介绍(Introduction)
ggplot2背后的一个关键思想是,它允许轻松地迭代,一次一层地构建一个复杂的绘图。每个图层可以来自不同的数据集,并且具有不同的美学映射,从而可以创建复杂的绘图,显示来自多个源的数据。
在本章中,将深入了解层的细节,以及如何控制所有五个组件:数据Data
、美学映射Aesthetic Mappings
、几何对象Geom
、统计变换Stat
和位置调整Position Adjustments
。
5.2 创建一张图形(Building a Plot)
我们要明确,在绘图过程实际上是有两个步骤。以mpg数据集为例,第一步,我们使用默认数据集和美学映射创建一个图:
p <- ggplot(mpg, aes(displ, hwy))
p

此时我们已经创建好了一幅图,表面上是一块画板,实际上这幅图中包含了mpg数据集中的所有数据和坐标轴信息,唯一缺的就是数据的可视化形式。
下面是第二步,通过几何对象添加图层:
p + geom_point()

几何对象point
,通过函数geom_point()
添加,()
中没有任何参数,代表使用默认值。使用函数geom_point()
是捷径,实际上,在后台它调用该layer()
函数以创建一个新层:
p + layer(
mapping = NULL,
data = NULL,
geom = "point",
stat = "identity",
position = "identity"
)
layer()
函数调用完全指定了该层的五个组成部分:
- mapping:映射,就是
aes()
函数,通常省略,NULL
就是指默认的ggplot()
函数中的映射 - data:数据,覆盖默认数据集,通常省略,
NULL
就是默认取ggplot()
中的数据集 - geom:几何对象,包含很多美学参数,例如颜色等,在这里设置不会成为标度。
- stat:统计变换,执行一些统计汇总,默认设置为
"identity"
时保持不变。这个参数在直方图和平滑曲线图中应用较多。geom
和stat
设置一个即可,每个geom
都有一个默认stat
,每个stat
默认一个geom
。 - position:位置,调整遮盖、堆叠的情况
5.3 数据(Data)
ggplot2
的作用只是将数据框可视化。在使用之前应该提前整理你的数据框,使其整齐、易于操作.
You’ll learn about tidy data in Chap. 9, but for now, all you need to know is that a tidy data frame has variables in the columns and observations in the rows.(列变量行观测)
library(ggplot2)
library(dplyr) #包含data_frame()函数
mpg #在包ggplot2中
mod <- loess(hwy ~ displ, data = mpg) #loess()生成线性模型
grid <- data_frame(displ = seq(min(mpg$displ), max(mpg$displ), length = 50))
grid$hwy <- predict(mod, newdata = grid)
grid
#> Source: local data frame [50 x 2]
#>
#> displ hwy
#> (dbl) (dbl)
#> 1 1.60 33.1
#> 2 1.71 32.2
#> 3 1.82 31.3
#> 4 1.93 30.4
#> 5 2.04 29.6
#> 6 2.15 28.8
#> # … with 44 more rows
接下来,我将分离与预测值特别远的观测:
std_resid <- resid(mod) / mod$s #标准残差
outlier <- filter(mpg, abs(std_resid) > 2)
outlier #称之为异常值
#> # A tibble: 6 x 11
#> manufacturer model displ year cyl trans drv cty hwy fl class
#> <chr> <chr> <dbl> <int> <int> <chr> <chr> <int>