R4 数据可视化教程(三)
七、ggplot2包的图形:简介
R 中的 ggplot2 包提供了一种比用 plot()和 plot()的辅助函数生成图形更简单的创建图形的方法。与使用 plot()时默认绘制的图相比,ggplot2 中的函数生成的默认图也具有更复杂的外观。此外,plot()中需要几个步骤的一些任务可以通过 ggplot2 包中可用的函数轻松编码。
ggplot2 中启动绘图的两个函数是 qplot()和 ggplot()。函数 qplot()是 plot()的 ggplot2 版本。该函数是一个独立的函数。ggplot()函数使用非传统的 R 语法将层添加到 ggplot()。使用加号运算符将创建和格式化图层的函数添加到 ggplot()中。图层生成了地块的内容。
ggplot2 软件包不是 r 中的缺省软件包。必须先安装该软件包,然后才能使用该软件包。这仅执行一次——尽管在更新发生时应该更新包。ggplot2 也不是 r 中默认加载的包。要在会话期间使用该包,必须手动加载该包。在 R 会话中,只需要加载一次包。
要在 RStudio 中安装 ggplot2 软件包,请选择右下方窗口中的 Packages 选项卡。选择标签下方横幅中的安装。安装在左侧。然后在打开的表单中输入 ggplot2。此外,确保选中“安装依赖项”框。r 将安装必要的软件包。
在 R 窗口上方的菜单中,选择 Packages & Data 选项卡。然后在 Packages & Data 选项卡下打开的下拉菜单中选择 Package Installer。将打开一个窗口,其中包含安装软件包的选项。选择“获取列表”按钮。列表打开后,右侧的搜索框可用于搜索 ggplot2。在列表中选择 ggplot2 名称,然后在列表的右下方找到 Install Packages 按钮。在按钮下方,选中“安装依赖项”框。然后选择 Install Packages 按钮(高亮显示)。将安装 ggplot2 软件包及其依赖项。
本章分为三个部分——对 ggplot2 软件包使用的语言和语法的描述,对 qplot()函数的描述,以及对 ggplot()的概述。关于 ggplot()更详细的信息可以在第 8 、 9 和 10 章节中找到。
7.1 gg plot 2 包中使用的语言和语法
ggplot2 包中使用的语言和语法与传统 r 略有不同,ggplot2 的语言使用了概念美学和几何或统计。对于 ggplot(),图是内置层。对于 qplot(),对 qplot()的调用是独立的,但是可以绘制多个层。
美学是要绘制的数据,以及如何呈现这些数据的说明。比如 x,y,点的颜色,线条的宽度都是审美,都是可以设置的。数据框通常用于包含美学。
几何和统计提供了绘制数据的函数。例如,点几何绘制散点图。
图层是在图上创建特定输出的函数和参数的组合。散点图中的点由点的几何图形绘制。使用平滑几何的新图层可以在散点图上绘制回归线。
关于语法,对 ggplot()的调用后面是操作符+,后面是对一个或多个函数的调用,每两个函数之间也由操作符+分隔。注意,根据+下的帮助页面。gg,如果层中的数据框是从 ggplot()中设置的数据框改变的,必须使用而不是+, %+%(由于 R 中的优先级问题)。
7.2 qplot()函数
qplot()(也称为 quickplot())函数是 plot()函数的 ggplot2 版本。与 ggplot()不同,qplot()不使用加号运算符来添加层。绘图指令是在函数调用中设置的。
该函数接受 15 个指定的参数,加上美学函数将使用的参数以及所选几何图形使用的任何参数。函数定义中的前三个参数是 x、y 和…,分别代表 x 变量、y 变量和任何其他美学参数,以及 qplot()调用的几何函数使用的任何几何参数。
par()的很多论点都可以作为 qplot()中的美学论点。但是,在赋值时,这些值必须包含在函数 I()中,因为 aes()是一个引用函数。(有关更多信息,请参见 qplot()的帮助页面。)例如,可以通过在对 qplot()的调用中设置pch=I( 1:25 )来绘制 25 个绘制字符符号。
第三个到第六个指定的参数是数据,用于在其中找到一些美学变量的数据框;facets,如果使用了 facet 函数,则使用 facet 函数;边距,用于在刻面完成时是否绘制边缘刻面;和 geom,用几何学来描绘美学。
第七到第十三个指定参数是第三章中常见的 xlim、ylim、log、main、xlab、ylab 和 asp。第 14 个和第 15 个指定的参数是 stat 和 position,这两个参数都不推荐使用——所以不在此讨论。
如果需要的话,美学参数 x、y 和任何其他要使用的美学变量,以及几何图形和小平面使用的变量都被赋值。为了美观,通常 x 和 y 是长度相同的数值向量。有时,只有 x 或 y 被设置为一个值。有时两者都没有被分配。在 qplot()中,x 和 y 都没有默认值。
对于除 x 和/或 y 之外的美学,参数值必须是长度为 1 或等于 x 长度的向量。对于几何,参数的名称和格式取决于 geom 的值(设置几何的参数)。
因为…在 qplot()的参数顺序中出现在第三位,所以第三个到第十五个指定的参数必须被赋予完整的参数名。data 参数接受 data.frame 类的一个对象,并给出一些美学参数从中取值的数据框。根据 qplot()的帮助页面,如果没有提供数据框,则 qplot()会根据分配的变量创建一个数据框。(分配的变量必须位于运行 qplot()的环境中,或者在参数的赋值中生成。如果要分配的对象在环境或数据框中不存在,则会出现错误。)数据没有默认值。
facets 参数接受 NULL 值或长度为 1 的字符向量。这意味着用于刻面的对象或表达式必须用引号括起来,即使对象必须是长度等于 x 的多元向量,或者是由波浪符号分隔的两个这样的向量。例如facets= "z",其中 z 是数据帧中的变量,或者facets="rep( 1:2, 12 ) ~ rep( 1:3, each=8 )",其中 x 的长度是 24。
多方面的论点有一些限制。如果 facets 分配了一个对象,则该对象必须位于分配给参数数据的数据框中。如果为 facets 分配了一个表达式而不是一个对象,则必须为 data 参数分配一个具有正确行数的数据框。否则,将为所有面绘制所有点。(数据帧的内容可以是任意的。)facets 的默认值为 NULL,即不进行分面。
margins 参数采用单元素逻辑向量。如果设置为 TRUE 并且设置了 facets,则 x 的边际分布图将绘制在 facet 图的下方。否则,不会绘制边际图。边距的默认值为 FALSE。
几何图形告诉 qplot()要绘制什么。geom 参数采用任意长度的字符向量。(geom 参数中可以包含多个几何图形。)vector 包含 qplot()要使用的几何图形的名称——用引号括起来。对于由几何图形调用的函数的参数,参数在 qplot()中设置。也就是说,在对 qplot()的调用中为参数赋值。
在表 7-1 中,给出了几何图形的名称,以及几何图形绘制的内容。参见清单 7-1 和图 7-1 中运行带有两个几何图形的 qplot()的示例。
图 7-1
将两个几何图形与 qplot()一起使用的示例。对于“平滑”几何图形,平滑方法设置为简单线性回归,并且不绘制置信带。点和线的颜色设置为黑色,并且不打印颜色键
表 7-1
qplot()函数使用的几何图形及其描述
几何图形名称
|
描述
|
| --- | --- |
| 建立一个 | 使用斜率和截距的向量绘制线–参数名为斜率和截距。 |
| -泥 | 用 y 的矢量画水平线。 |
| 非织造布 | 用 x 的向量画垂直线。 |
| 区域 | 绘制面积图–必须设置 x 和 y。 |
| 带状物 | 绘制带状图–必须设置 x、ymin 和 ymax 或 y、xmin 和 xmax。 |
| 酒吧 | 绘制一个条形图,显示每个 x 值或每个 y 值都相同的观察值的数量–可以设置 x 或 y,但不能同时设置两者。 |
| 山口 | 为每个 x 值绘制一个 y 中观察值总和的条形图–必须设置 x 和 y。 |
| bin2d | 创建 x 和 y 都相同的观察数量的热图-x 和 y 都必须设置。 |
| 空白的 | 不绘制任何内容–可用于设置轴上的比例。 |
| 箱线图 | 图 Tukey 样式的箱线图–可以设置 x(对于水平箱线图)或 y(对于垂直箱线图),但不能同时设置两者。参数组可用于创建箱线图,组中的每个值对应一个箱线图。 |
| 轮廓 | 绘制密度 z 的等值线,其中 z 为每个观察值,观察值的 x 和 y 值用于轴——必须设置 x、y 和 z。 |
| 轮廓 _ 填充 | 绘制与等高线相同的等高线,但等高线之间的区域用渐变颜色填充。 |
| 数数 | 绘制 y 与 x 的关系图,其中绘制字符的大小取决于 x 和 y 值相同的观察值的数量–必须设置 x 和 y。 |
| 横木 | 对于 x 的每个值,在存在数据的 y 层绘制一条水平线,线的宽度由参数 width 设置。此外,在直线周围画出方框,方框的高度由矢量 ymin 和 ymax 给出。 |
| 误差线 | 对于每个 x 值,在存在数据的 y 值处画一条垂直线,长度用矢量 ymin 和 ymax 输入。此外,水平线绘制在垂直线的顶部和底部,宽度由参数 width 给出。 |
| 误差线 | 对于 x 的每个值,在存在数据的 y 处画一条水平线,宽度用向量 xmin 和 xmax 输入。此外,垂直线绘制在水平线的左端和右端,线的高度由参数 height 给出。 |
| 线路范围 | 对于 x 的每个值,在存在数据的 y 处画一条垂直线,其长度由矢量 ymin 和 ymax 设置。 |
| 点范围 | 对于 x 的每个值,在存在数据的 y 处绘制一个点和一条垂直线,其中线的长度由向量 ymin 和 ymax 设置。 |
| 曲线 | 从赋给参数 x 和 y 的向量坐标到赋给参数 xend 和 yend 的向量坐标绘制曲线,曲率由参数 curvature 给出。负值给出凸图,正值给出凹图-如果曲线的方向是从左到右-否则,反之亦然。绝对值越大,曲率越大。必须设置参数 x、y、xend 和 yend,并且可以设置曲率。 |
| 段 | 与曲线相同,只是绘制的是线段而不是曲线。 |
| 密度 | 画出估计的内核密度——可以设置 x 或 y,但不能同时设置两者。 |
| 密度 2d 或密度 _2d | 绘制二维估计内核密度等值线–必须设置 x 和 y。 |
| 多特普图 | 绘制点状图–必须设置 x,不得设置 y。 |
| 频率聚合 | 绘制连接相同大小的箱内的观察数量的线图–可以设置 x 或 y,但不能同时设置两者。参数 bin 给出了要将数据装入其中的 bin 的数量;这些线在绘图的开始和结束时变为零。 |
| 柱状图 | 在相同大小的箱内绘制观察数量的直方图–可以设置 x 或 y,但不能同时设置两者。bin 的数量由自变量 bin 设置。 |
| 十六进制 | 绘制一个六边形的观察点计数的热图,该热图是通过将 x 和 y 的类进行交叉而形成的——必须设置 x 和 y,并且可以通过自变量 bin 来设置 bin 的数量。 |
| 振动 | 绘制抖动点–必须设置 x 和 y。 |
| 标签 | 在由 x 和 y 给出的坐标处的框中绘制标签–必须设置 x 和 y。此外,必须设置参数标签,并且应该包含标签。 |
| 文本 | 与标签相同,除了没有盒子。 |
| 线条 | 画一条连接 x 和 y 坐标的线;x 在绘图前排序,顺序用于对 y 重新排序–必须设置 x 和 y。 |
| 小路 | 与行相同,只是 x 不排序,y 不重新排序。 |
| 步骤 | 绘制 x 和 y 的步长图,其中,与 line 一样,x 是排序的,y 是按 x 的顺序排序的–必须设置参数 x 和 y。 |
| 地图 | 基于参考地图绘制多边形–必须设置参数地图。 |
| 要点 | 绘制 y 与 x 的散点图–必须设置 x 和 y。 |
| 多边形 | 使用多边形绘制矢量 x 和 y 之间的关系–必须设置 x 和 y。 |
| 即时通信软件 | 绘制分位数/分位数图–必须设置参数 sample(sample 的值是要与概率分布进行比较的数据向量),并且不设置参数 x 和 y。 |
| 腾讯视频 | 绘制分位数/分位数线–参数是 qq 的参数。 |
| 分位点 | 使用分位数回归绘制指定分位数的回归线–必须设置 x 和 y。此外,可以设置参数分位数。 |
| 光栅 | 在 x 和 y 给定的坐标上绘制大小相等的矩形——必须设置参数 x 和 y。此外,参数 fill 可用于设置填充颜色。 |
| 矩形 | 给定矩形左侧、右侧、底部和顶部的坐标,绘制矩形——参数为 xmin、xmax、ymin 和 ymax。此外,还可以设置填充。 |
| 瓷砖 | 给定中心坐标、宽度和高度,绘制矩形–必须设置参数 x、y、宽度和高度。此外,还可以设置填充。 |
| 小地毯 | 在地块边缘绘制地毯–必须为要绘制的地毯设置 x 和/或 y。 |
| 旧金山 | 绘制简单特征对象–参见 https://cran.r-project.org/web/packages/sf/vignettes/sf1.html 。 |
| sf_label | 简单要素对象的地块标签。 |
| 制作软件 | 简单要素对象的打印文本。 |
| 光滑的 | 绘制平滑的散点图——必须设置 x 和 y,并且可以设置方法。 |
| 说 | 基于位置、角度和半径绘制线段–必须设置 x、y、角度和半径。 |
| 小提琴 | 绘制小提琴图–必须设置 x 和 y,并且可以设置组。 |
关于几何图形的更多信息可以通过查看 ggplot2 包的内容找到。以 geom_ 开头的函数是几何图形。函数名的第二部分给出了几何图形的名称。
qplot(
x=pop75,
y=pop15,
data=LifeCycleSavings,
geom=c( "point", "smooth" ),
method="lm",
se=FALSE,
show.legend=FALSE,
col=I(1),
main="Example of Using Two Geometries in qplot() with Arguments"
)
Listing 7-1Code for the example in Figure 7-1 of using two geometries in qplot() and setting two arguments for the second geometry
在图 7-1 中,运行清单 7-1 中的代码。
注意,点和回归线都是在对 qplot()的一次调用中绘制的。绘制点是因为值“点”是分配给 geom 的向量的一个元素。绘制回归线是因为值“smooth”是分配给 geom 的向量的一个元素,并且因为 method 在调用中设置为“lm”。通过在调用中将“se”设置为 FALSE 来抑制默认绘制的回归线的置信带。
通过将 col 设置为I(1),将点和线的颜色设置为黑色(col 是 par()的参数)。通过将 show.legend 设置为FALSE来抑制设置 col 时默认绘制的颜色键图例。该图具有 ggplot2 包中使用的默认背景和网格-灰色带白色网格线。
对于 xlim、ylim、log、main、xlab、ylab 和 asp 参数,参数 xlim、ylim、main、xlab 和 ylab 包含在 3.2.1 节中。第 3.4.6 节介绍了参数日志。参数 asp 包含在 3.2.2 节中。
7.3 gg plot()函数概述
函数 ggplot()打开图形设备,并根据 ggplot()中设置的参数,绘制图形的背景和图形的轴。其他函数绘制绘图的内容。
对于 ggplot(),函数中只有两个参数正在使用,即数据和映射参数。数据参数指定绘图的整体数据框(可在给定图层中指定不同的数据框)。如果未设置数据框,R 将在本地环境(调用 ggplot()的环境)中查找对象。
映射参数指定要绘制的数据以及与数据一起使用的其他美学。(美学不一定在对 ggplot()的调用中设置。)
数据参数采用 NULL 值或 data.frame 类的对象。默认值为NULL。
参数映射调用函数 aes()。函数 aes()创建一个美学映射。(通过使用加号运算符添加 aes()函数,可以在调用 ggplot()之外设置美观性。)映射的默认值是aes(),也就是一个空的美学映射。
如果设置了映射,并且在 aes()中设置了值 x 和 y,则调用 ggplot()会打开一个具有默认背景以及 x 和 y 比例设置的图形设备。但是,审美不是图出来的。
在清单 7-2 中,代码给出了四种方式来设置基本相同的背景。第一个和第三个图与第二个和第四个图之间的区别是不同的轴标签。
#1
ggplot(
data=LifeCycleSavings,
mapping=aes(
pop75,
pop15
)
)
#2
ggplot(
mapping=aes(
LifeCycleSavings$pop75,
LifeCycleSavings$pop15
)
)
#3
ggplot(
data=LifeCycleSavings
) +
aes(
pop75,
pop15
)
#4
ggplot(
) +
aes(
LifeCycleSavings$pop75,
LifeCycleSavings$pop15
)
Listing 7-2Code for four ways to get essentially the same background
运行清单 7-2 中第一个代码的结果如图 7-2 所示。通过在第一个 ggplot()函数中添加labs( title="Example of Just Calling ggplot()")来添加标题。
图 7-2
调用 ggplot()而不使用其他图层的示例
请注意,没有绘制任何数据。轴上的标签是绘制的变量的名称。轴上的刻度基于 x 和 y 向量中的值。
在调用 ggplot()之后,最高层的函数种类是生成主题、美学、几何、统计和注释的函数,还有用于地图的*边界()*函数。
主题功能设置了绘图的整体外观。美学函数设置要绘制或在绘制中使用的任何变量,以及影响绘制内容外观的参数。
几何和统计函数给出绘图函数,该函数将被应用于由美学函数设置的变量(例如,在 x 和 y 已经由美学函数设置之后,告诉 R 绘制散点图)。调用几何或统计函数时,会打开一个新图层。(也可以通过调用函数图层()并在调用中指定几何或统计来打开新的几何或统计图层。)
根据 annotate()的帮助页面,注释功能也创建一个层,是一种特殊的几何图形。注释层用于将网格图形对象(grob 类的对象–参见网格包中函数 grob()的帮助页)添加到绘图中。borders()函数将地图边界图层从地图边界的形状文件添加到绘图中。
使用加号运算符将上述函数添加到 ggplot()中。(美学函数也可以添加到对 ggplot()的调用中,如前所述。)根据+下的帮助页面。gg,还有三种函数可以用加号运算符添加到对 ggplot()的调用中。这三种函数是比例函数、坐标函数和多面函数。还可以添加一些其他功能,详见第十章。
比例函数影响 ggplot()创建的图中的图层,就像 par()的参数影响 plot()创建的图一样。比如 par()中的 cex 参数是 aes()中的 scale_size_ 函数,par()中的 pch 参数是 aes()中的 scale_shape_ 函数。其他比例功能可以反转轴上的比例或设置线型,以及对绘图外观进行其他更改。
坐标函数影响 ggplot()使用的坐标系类型。例如,ggplot()可以从笛卡尔坐标切换到极坐标,或者可以使 x 和 y 轴上的单位相对于一个轴上的单位大小和另一个轴上的单位大小具有固定的比率。
facet 函数 t ell ggplot()创建一个绘图向量或一个绘图网格。多个图的轴和背景是相同的,但是每个图中绘制的点、线、标签和/或文本取决于一个或两个分类变量。例如,给定男孩和女孩的身高和体重数据,以及给出儿童性别的指标变量,可以使用分面函数来分别绘制女孩和男孩的数据,但比例相同。
在第 8 、 9 和 10 章中,更详细地介绍了 ggplot()用于创建和格式化图的函数。在第八章中,描述了美学和主题功能。在第九章中,涵盖了分层功能——几何、统计、注释和边界()。第十章描述了比例、坐标和刻面功能,以及其他地方未涉及的功能。
八、使用ggplot()函数:主题和美学
本章涵盖了控制绘图背景和绘图内容外观的功能-主题功能和美学功能。主题功能为绘图背景的外观设置参数,但不为绘图内容设置参数。美学功能设置内容外观的参数。第 8.1 节描述了主题功能。第 8.2 节描述了美学功能。
8.1 主题功能
主题功能分为三种。第一种是函数 theme(),用于设置主题。theme()有 94 个指定的参数,加上一些没有指定的参数。第二类由预设主题组成,共有十种。第三种功能与主题一起工作——查看主题的内容并修改预设的主题。在本节中,我们将分别研究每一种类型。
主题( )函数
theme()函数设置绘图背景的属性。也就是说,theme()设置构成绘图背景的线条的属性、在绘图背景中绘制的矩形的属性、作为绘图背景的一部分绘制的文本的属性(包括标题)以及绘图的纵横比。函数 theme()还设置图例的属性(而不是内容)。
第 93 个参数是...,给出了任何可以被 theme()使用的参数,但不是 ggplot2 包中函数的参数。(根据主题()的帮助页面,必须通过在函数 register_theme_elements()中设置参数 element_tree 来注册参数。)theme()的第 93 个和第 94 个指定参数给 R 的信息是:theme()生成的主题是否是完整的主题,以及运行 theme()时是否检查主题是否有效。
8.1.1.1 主位( )的前五个论元和 ggplot2 的主位元函数
theme()的前五个参数是 line,用于设置线条的属性;rect,用于设置矩形的属性;文本,用于设置文本的属性;title,用于设置主标题和轴标签的属性;和 aspect.ratio,用于设置绘图的 y 与 x 的比率。
line 参数接受对 element_line()函数的调用值。影响线条外观的参数在 element_line()中设置。
rect 参数接受对 element_rect()函数的调用值。影响矩形外观的参数在 element_rect()中设置。
文本参数接受对 element_text()函数的调用值。title 参数采用对 element_text()函数的不同调用的值。影响图例和标题中文本外观的参数是在对 element_text()函数的调用中设置的。
aspect.ratio 参数采用一个长度为 1 的正数值向量(是 y 轴上一个单位在 x 轴上的单位数)。任何其他类型的值都会产生错误。
函数的作用是
element_line()函数有七个参数。参数是 color(或 color ),代表线条的颜色;size,为线的大小;线型,表示要打印的线的类型;lineend,表示要使用的线端样式;箭头,用于箭头的规格(如果绘制了箭头);和 inherit.blank,如果 element_blank()出现在继承行中,则确定是否从函数 element_blank()继承(请参见下面的注释)。从 element_blank()继承,返回一个空的命名列表,告诉 R 不要绘制 line 参数。
颜色(或色彩)参数采用颜色值的矢量(可能的颜色值在第 3.4.1 节或ggplot2-specs插图中有所介绍)。向量可以是任意长度,并且值循环(但是首先按字母顺序排序)。对于网格,顺序从网格的底部开始,然后在绘制水平线之后,从网格的左侧开始。默认值通常是“黑色”。
size 参数接受任意长度的非负数值的向量。向量循环的元素。size 的值给出了以毫米为单位的线条宽度。
linetype 参数采用任意长度的向量,其值与 plot()中 lty 使用的值相同(有关设置,请参见第 3.3.2 节)。向量循环的元素。线型的默认值为 1 或“实心”。
lineend 参数接受任意长度的字符向量。论证类似于 par()中的 lend(见 3.4.4 节)。在 ggplot2 包中,lineend 可以取值“butt”、“square”和“round”。默认值为“对接”。
arrow 参数接受对 arrow()函数的调用值。arrow()函数在网格包中,有四个参数。这些参数是箭头臂相对于箭头轴的角度、箭头臂长度的长度、轴上箭头位置的端点以及开放或封闭箭头的类型。所有的参数都采用一个任意长度和周期的向量——但是元素是如何循环的还不清楚。
arrow()的角度参数采用一个数值向量。角度以度为单位。默认值为 30。
arrow()的 length 参数接受对 unit()函数的调用值,其中一个非负的数字向量被输入到 unit()中。unit()函数位于网格包中,用于设置数值矢量的单位。长度的默认值为 0.25 英寸。
arrow()的 ends 参数采用一个字符向量,该向量带有一个或多个值为“open”或“closed”的元素。如果设置为“打开”,箭头有两臂。如果设置为闭合,箭头为三角形。默认值为“打开”。
arrow()的类型参数采用带有一个或多个元素的字符向量,这些元素的值可以是“first”、“last”或“both”。如果设置为“第一个”,箭头位于直线的起点。如果是“最后”,箭头位于线的末端。如果为“both ”,箭头将绘制在线的两端。默认值为“最后”。
element_line()的 inherit.blank 参数采用任意长度的逻辑向量(请参见前面的文本)。默认值为 FALSE。
函数的作用是
element_rect()函数有六个参数:填充矩形的颜色、颜色、大小、线型和 inherit.blank。请注意,在 element_rect()中,参数颜色、大小和线型影响矩形的边框,并且只能为边框设置一种颜色、大小和线型。也就是说,每个都将长度为 1 的向量作为值。有关参数 color、colour、size、linetype 和 inherit.blank 的说明,请参见前面对 element_line()的说明。
在 element_rect()中,参数 fill 采用任意长度的颜色矢量(参见第 3.4.1 节或ggplot2-specs插图)。如果在 theme()中设置了参数 panel.border,则该值是对 element_rect()的调用。在调用中,fill 的值应该设置为“transparent ”,或者设置为透明度值小于 1 的颜色值。否则,网格(如果设置了网格)和绘图的内容会被填充颜色覆盖而看不到。
element_text()和 margin()函数
element_text()函数有 12 个参数。参数是 family,表示要使用的字体系列;face,为要使用的字体粗细;color(或 color),为文本的颜色;size,为文本的大小;hjust 和 vjust,用于文本远离中心的水平和垂直放置;角度,为文本的角度;lineheight,表示文本行的高度;margin,表示文本周围的边距大小;调试,针对是否使用专门的工具进行可视化调试;和 inherit . blank–请参见前面的文本。
family 参数采用包含字体系列名称的任意长度的字符向量(参见第 3.4.2 节)。对于标题,只使用第一个值,如果长度大于 1,则会给出警告。对于轴刻度标签,元素会循环,但如果长度超过 1,仍会给出警告。根据ggplot2-specs插图,只有字体系列“sans”、“serif”和“mono”在计算平台上始终可用。
face 参数采用任意长度的数值向量。对于 title,只使用第一个值,如果长度大于 1,则会给出警告。对于轴刻度标签,元素会循环,但如果长度大于 1,则会给出警告。合法值是字体在 par()中可以取的值(参见第 3.4.2 节)。
颜色(或色彩)参数采用任意长度的颜色值向量(见第 3.4.1 节或ggplot2-specs插图)。对于标题,只使用第一个值。如果长度大于 1,则会给出警告。对于轴刻度标签,向量的元素在标签中循环,但会给出警告。
size 参数采用任意长度的非负数值向量或运行 rel()函数的非负向量。如果 vector 不是 rel()的参数,则数值给出文本的磅值,例如,10 磅文本为 10 磅。如果由 rel()操作,这些值相对于标准字符大小,也就是说,这些值相对于 1,其中值 1 给出标准字符大小。
hjust 和 vjust 参数接受任意长度的数值向量。这两个参数的行为类似于函数 axis()中的 hadj 和 padj(参见 4.1.2.1 节)。
角度参数采用长度为 1 的数字向量。对于 x 轴上的文本,该值以相对于水平方向的度数表示,对于 y 轴上的文本,该值以相对于垂直方向的度数表示。
lineheight 参数采用长度应为 1 的数值向量。虽然更长的向量只会给出警告,但只使用第一个值。
margin 参数调用 margin()函数。函数 margin()有五个参数:t、r、b 和 l——表示文本上、右、下和左的边距大小——以及 unit,表示 t、r、b 和 l 值的单位。
t、r、b 和 l 参数采用任意长度的数字向量。仅使用第一个值。t、r、b 和 l 的默认值为 0。
单位参数采用任意长度的字符向量。仅使用第一个值。单位的一些值是“pt”、“cm”和“inches”(有关更多类型的单位,请参见网格包中单位()的帮助页)。单位的默认值是“pt”,即点。
调试参数采用长度为 1 的逻辑向量。如果长度超过一个元素,则函数不会调试。这是一个有用的论点,可以看出您的更改会产生什么效果。debug 的默认值为 FALSE。
inherit.blank 参数采用长度为 1 的逻辑向量。如需详细资讯,请参阅上述文字中 element_line()下的。
8.1.1.2 第六篇至第九十四篇指定主题的论证( )和一个例子
接下来的 87 个参数细化了轴、图例、面板、绘图区域以及在刻面完成时绘图外部周围的条带的绘图指令。这 87 个参数包含影响轴的 35 个参数、影响图例的 21 个参数、影响面板的 13 个参数(如果不进行分面,则影响绘图区域;如果进行分面,则影响绘图和绘图区域之间的分布)、影响整个图形的 9 个参数,以及使用分面时影响绘图周围的条带的 9 个参数。
87 个参数的名称以单词 axis、legend、panel、plot 或 strip 开头。这个词后面是一个句号,后面是另一个词,有时是更多的词,用句号隔开。例如,参数axis.ticks.y.right设置绘图右侧 y 轴刻度线的属性。
在 theme()的论点中,句号划定了层次。在每个级别,未设置的参数采用下一个更高级别的值。也就是说,如果没有设置axis.ticks.y.right,那么自变量被设置为axis.ticks.y的值。如果没有设置axis.ticks.y,那么axis.ticks.y.right取axis.ticks的值。如果未设置axis.ticks,则axis.ticks.y.right被设置为自变量line的值。这个过程叫做继承——axis.ticks.y.right继承axis.ticks.y,继承axis.ticks,继承line。
这 87 个参数中的大多数都采用 element_line()、element_rect()、element_text()或 margin()作为值。(这四个函数和函数 rel()共享一个帮助页面。)大多数其他参数从 grid()包中获取函数单元()作为值。主题()的帮助页面提供了关于 87 个参数所取值的更多信息。
最后两个参数 complete 和 validate 采用长度为 1 的逻辑向量。缺省值 complete 为 FALSE,validate 为 TRUE。
在清单 8-1 中,给出了设置主题的示例代码。
ord = order(
LifeCycleSavings$pop75
)
library(
ggplot2
)
ggplot(
LifeCycleSavings[ ord, ],
aes(
pop75,
pop15
)
) +
theme(
panel.border=element_rect(
color="grey40",
fill="transparent",
size=2
),
panel.background=element_rect(
fill="grey85"
),
panel.grid.major=element_line(
size=0.75,
color="grey45"
),
panel.grid.minor=element_line(
size=0.5,
color="grey60"
),
title=element_text(
color="grey45",
face=4,
family="serif",
size=14,
angle=3
),
plot.title=element_text(
hjust=0.5,
vjust=0.5,
lineheight=1.1,
margin=margin(
0,
0,
0.3,
0,
"cm"
)
),
axis.text=element_text(
color="grey50",
face=2,
family="serif",
size=rel( 1.1 ),
hjust=1,
vjust=1
)
) +
labs(
title="Example of \nSetting \nArguments in theme()"
)
Listing 8-1Code for the example in Figure 8-1 of setting arguments in theme()
在图 8-1 中,运行清单 8-1 中的代码。
图 8-1
在 theme()中设置几个参数的例子。没有绘制数据
请注意,ggplot()是在数据框和为 x 和 y 设置的值的情况下运行的。在主题()中,首先设置绘图区域边界。颜色设置为中间灰度,边框宽度设置为 2 毫米。边框内的区域设置为透明。
接下来,绘图区域的背景设置为浅灰色。然后,主要网格线的宽度为 0.75 毫米,灰色略浅于边框。然后,次要网格线被赋予 0.75 毫米的宽度和更浅的灰色。
然后,标题和轴标签的格式化就完成了。标题和标签的颜色设置为与主要网格线相同的颜色。字体粗细设置为粗体和斜体,字体外观设置为衬线字体。文本的大小被设置为 14 磅,并且文本被赋予了远离轴三度的倾斜度。
然后,完成标题的特定格式。第一,标题在纵横两个方向居中。行高设置为 1.1。最后,文本和轴之间的边距增加了 0.3 厘米。
最后完成轴刻度标签的格式化。颜色设置为比标题略浅的灰色。字体粗细设置为粗体,但不是斜体,字体系列设置为衬线字体。文本的大小增加了 10%,当相对于轴查看时,标签绘制在刻度线的左侧,更靠近轴。
labs()函数是清单中的最后一个函数。该函数绘制标题。轴上的标签包含变量名。
8.1.2 预设主题功能
ggplot2 包中有十个预设主题。除了 theme_grey()和 theme_gray()函数相同之外,绘图背景的外观因函数而异。所有十个都采用相同的四个参数;而且,在所有函数中,参数都有相同的默认值。下面,首先描述四个论点,然后是十个主题()。
四个参数是 base_size,当没有对字体大小进行调整时用于字体大小;base_family,供字体系列使用;base_line_size,为要使用的线宽;和 base_rect_size,用于矩形中线条的宽度。
base_size 参数采用任意长度的数字向量。只使用第一个元素,如果长度大于 1,就会给出警告。基本字符大小以磅为单位。base_size 的默认值是 11。
base_family 参数采用任意长度的字符向量。这些值必须是操作系统可识别的字体系列。(更多信息见第 3.4.2 节。)base_family 的默认值是" "。
base_line_size 和 base_rect_size 参数都采用任意长度的非负数值向量。线宽以毫米为单位。价值观循环往复。两者的默认值都是 base_size 除以 22。
theme_grey()(或 theme_gray())函数是 ggplot()和 qplot()的默认背景。绘图背景是浅灰色;网格线是白色的。字体系列是操作系统的默认系列(在我的系统上是 Arial Unicode)。完整的设置列表可以通过在 R 提示符下输入 theme_gray 或者在没有其他函数的情况下调用 theme_grey()来找到(对本节中的任何函数使用相同的方法)。
theme_bw()函数给出了黑色的文本和绘图边框,边框的线宽为 0.5 毫米,面板背景为白色,网格线为浅灰色。字体系列与 theme_grey()中的字体系列相同。
theme_linedraw()函数严格地以黑色和白色绘制。主题和 theme_bw()是一样的,除了网格线是通过减小线条的宽度而不是将线条的颜色变成灰色来变亮的。对于 theme_linedraw(),主要网格线的宽度为 0.1 毫米,次要网格线的宽度为 0.05 毫米。
函数给出了一个白色的背景,灰色的边框和网格线。文本与 theme_grey()相同。
theme_dark()函数给出了深灰色的绘图背景和更深灰色的网格线。没有绘制边界。文本与 theme_grey()相同。
函数的作用是:给出一个没有设置背景和边框的图。绘制浅灰色网格线,文本与 theme_grey()相同。
函数的作用是:隐藏边框和网格线。但是,由于绘制了 y 轴和 x 轴,因此在图中可以看到一个 L 形框。背景设置为白色,文字与 theme_grey()相同。
theme_void()函数给出了一个没有边框的绘图,没有绘图页边空白——除了标题、副标题、题注和标签的页边空白(如果调用了 labs ),并且只为设置的参数——没有网格线。调用 xlab()和 ylab()没有效果。背景颜色是白色。但是,如果运行几何图形,则会打印几何图形。
theme_test()函数给出了一个与 theme_linedraw()相同的绘图,只是没有绘制网格。根据 theme_test()的帮助页面,该函数对于测试参数的新值非常有用。
在清单 8-2 中,给出了图 8-2 的代码,一个在 theme_light()中设置四个参数的例子。
图 8-2
在 theme_light()中设置 base_size、base_family、base_line_size 和 base_rect_size 的示例
ggplot(
LifeCycleSavings[ ord, ],
aes(
pop75,
pop15
)
) +
theme_light(
base_size=14,
base_family="serif",
base_line_size=1:3,
base_rect_size=4
) +
labs(
title="Example of Setting Arguments in theme_light()"
)
Listing 8-2Code for the example in Figure 8-2 of setting base_size, base_family, base_line_size, and base_rect_size in theme_light()
在图 8-2 中,运行清单 8-2 中的代码。
文本大小设置为 14 磅,文本系列设置为 serif。网格线的宽度设置为 1、2 和 3 毫米;宽度在网格线中循环——从次要网格线开始,然后循环到主要网格线(有点)。水平线和垂直线似乎分别循环。线条的顺序从最左边或最低的次要线条开始,到最右边或最高的主要线条结束。边框线宽度设置为 4 毫米。
使用主题
当 R 会话启动时,当前主题——qplot()使用的主题和 ggplot()使用的主题(如果在对 ggplot()的调用中没有设置主题的话)——是 theme_gray()(默认主题)。运行在 R 环境层的函数可以改变当前主题的参数。
在运行 ggplot()或 qplot()之前,可以将当前主题设置为新主题、更新或替换。有一个返回当前主题的函数和一个设置当前主题的函数。更改当前主题中的一些设置或更改当前主题中的所有设置是通过另外两个函数完成的。
当运行 ggplot()时,有时一个主题中的大多数设置都适合该图,而少数设置应该更改。在对 ggplot()的调用中更改主题是通过两个操作符完成的。一个话务员更新通话中的主题,另一个话务员替换通话中的主题。
对于开发人员来说,为正在开发的包创建一个新的主题可以通过 ggplot2 包中的四个函数来完成。第 8.1.3 节的第一小节介绍了主题的设置和更改。第二小节涵盖了开发人员使用的一些功能。
8.1.3.1 主题获取( )、主题设置( )、主题更新( )和主题替换( )函数以及+和%+替换%运算符
设置和修改主题的函数和操作符要么使用当前主题,要么使用添加到 ggplot()调用中的函数。函数 theme_get()和 theme_set()获取并设置当前主题。函数 theme_update()和 theme replace()改变或替换当前主题。运算符+和%+replace%更新或替换调用中的主题。
theme_get()函数不带参数,返回当前主题()的内容。该函数返回一个包含 93 个元素的列表,这些元素是影响绘图外观的 92 个参数,在 theme()的帮助页面上列出,加上第 93 个元素,strip.text.y.left。参数 complete 和 validate 是列表的属性。
函数的作用是:将当前主题设置为一个新主题。该函数接受一个新主题的参数 new。新参数接受一个包含构成主题的参数的列表,通常是对主题函数的调用。
函数使用对元素函数的命名调用来更新当前主题。元素函数被赋予要改变的主题()参数的名称,并包含要应用于主题的改变。每两个元素函数之间用逗号分隔。
函数的作用是:替换当前的主题。对于调用 theme_replace()时出现的参数,参数被设置为给定的值。theme()的其他参数被 theme_replace()设置为 NULL。函数 theme_replace()接受与 theme_update()相同类型的参数。
要在运行 ggplot()时更新预设主题,请使用+运算符。设置了更改参数的 theme()函数被添加到预设主题中。效果与使用 theme_update()相同。
要在 ggplot()运行时替换预设主题,可以使用%+replace%运算符添加 theme()函数。效果与使用 theme_replace()相同。
在清单 8-3 中,给出了使用前面四个函数和两个运算符的例子。
# First, two objects are defined using the operators
# %+% and %+replace%.
# 1
# The object to.update.theme is given the value theme_bw()
# plus an update to the theme using the operator +.
# The change to the theme is printed out.
# The argument color is “grey20” in theme_bw().
> to.update.theme <- theme_bw() +
theme( panel.border=element_rect( size=3, fill="transparent" ) )
> to.update.theme$panel.border
List of 5
$ fill : chr "transparent"
$ colour : chr "grey20"
$ size : num 3
$ linetype : NULL
$ inherit.blank: logi FALSE
- attr(*, "class")= chr [1:2] "element_rect" "element"
# 2
# The object to.replace.theme is given the value theme_bw()
# plus changes to the theme using the operator %+replace%.
# The change to the theme is printed out.
# The argument colour is now NULL.
> to.replace.theme <- theme_bw() %+replace%
theme( panel.border=element_rect( size=3, fill="transparent" ) )
> to.replace.theme$panel.border
List of 5
$ fill : chr "transparent"
$ colour : NULL
$ size : num 3
$ linetype : NULL
$ inherit.blank: logi FALSE
- attr(*, "class")= chr [1:2] "element_rect" "element"
# The objects to.update.theme and to.replace.theme are now
# used in theme_set(), theme_update() and theme_replace().
# The functions theme_get() and theme_set() are run
# a number of times.
# 3
# The panel.border argument of the current theme is printed out.
# The value is an empty list – that is, all values are NULL.
> theme_get()$panel.border
list()
- attr(*, "class")= chr [1:2] "element_blank" "element"
# 4
# The current theme is set to the theme in to.update.theme
# using theme_set(). The panel.border argument is printed out.
# The current theme now has a transparent background,
# a border colored “grey20”, and a border 3 millimeters wide.
> theme_set( to.update.theme )
> theme_get()$panel.border
List of 5
$ fill : chr "transparent"
$ colour : chr "grey20"
$ size : num 3
$ linetype : NULL
$ inherit.blank: logi FALSE
- attr(*, "class")= chr [1:2] "element_rect" "element"
# 5
# The current theme is set back to theme_grey() and
# and panel.border is printed out.
> theme_set( theme_grey() )
> theme_get()$panel.border
list()
- attr(*, "class")= chr [1:2] "element_blank" "element"
# 6
# The current theme is set to the value of to.replace.theme,
# using theme_replace(), then printed out.
# Only the color and size are not NULL.
> theme_set( to.replace.theme )
> theme_get()$panel.border
List of 5
$ fill : chr "transparent"
$ colour : NULL
$ size : num 3
$ linetype : NULL
$ inherit.blank: logi FALSE
- attr(*, "class")= chr [1:2] "element_rect" "element"
# 7
# The current theme is set to theme_bw() and
# and panel.border is printed out.
> theme_set( theme_bw() )
> theme_get()$panel.border
List of 5
$ fill : logi NA
$ colour : chr "grey20"
$ size : NULL
$ linetype : NULL
$ inherit.blank: logi TRUE
- attr(*, "class")= chr [1:2] "element_rect" "element"
# 8
# The function theme_update() sets the current theme to
# the theme in #’s 1 & 4.
> theme_update( panel.border=element_rect( size=3,
fill="transparent" ) )
> theme_get()$panel.border
List of 5
$ fill : chr "transparent"
$ colour : chr "grey20"
$ size : num 3
$ linetype : NULL
$ inherit.blank: logi FALSE
- attr(*, "class")= chr [1:2] "element_rect" "element"
# 9
# The current theme is set back to theme_bw()
> theme_set( theme_bw() )
> theme_get()$panel.border
List of 5
$ fill : logi NA
$ colour : chr "grey20"
$ size : NULL
$ linetype : NULL
$ inherit.blank: logi TRUE
- attr(*, "class")= chr [1:2] "element_rect" "element"
# 10
# The function theme_replace() is run to replace the
# current theme. The theme is set to the theme of #’s 2 & 6
> theme_replace( panel.border=element_rect( size=3, fill="transparent" ) )
> theme_get()$panel.border
List of 5
$ fill : chr "transparent"
$ colour : NULL
$ size : num 3
$ linetype : NULL
$ inherit.blank: logi FALSE
- attr(*, "class")= chr [1:2] "element_rect" "element"
# 11
# ggplot() is run with the current theme - given in #10.
> ggplot( data=LifeCycleSavings, aes( pop75, pop15 ) ) +
labs( title="Example of Using the Current Theme in #10" )
Listing 8-3Output from R of the various ways of changing all or part of a theme. The functions theme_get(), theme_set(), theme_update(), and theme_replace() are demonstrated, as well as the operators + and %+replace%
图 8-3 显示了使用清单 8-3 的第十部分中设置的当前主题运行 ggplot()的示例。主题在第九部分中设置为 theme_bw(),主题的 panel.border 元素在第十部分中被替换。
图 8-3
将当前主题设置为 theme_bw()并使用 theme_replace()更改主题的 panel.border 参数中的两个参数的示例–这将其他参数设置为 NULL
注意,图的边界是黑色而不是深灰色,边界的宽度是 3 毫米。因为填充是透明的,所以网格线会显示出来。
8.1.3.2 创建并注册了一个新主题
当开发人员开发一个新的包时,有时开发人员希望在 theme()中加入一个新的参数。函数 theme()允许在第 93 个参数(也就是…)加入新元素。要全局使用,当新包的库打开时,必须在 ggplot2 包中注册元素。
有四个函数管理在第 93 个参数处向 theme()添加元素。这些函数是 register_theme_elements()、reset_theme_settings()、get_element_tree()和 el_def()。
函数的作用是:注册 ggplot2 中的元素。函数的作用是:将一个会话的当前主题重置为默认主题,并删除任何新元素。
函数的作用是:返回当前的元素树。(元素树是包含 ggplot2 中已注册元素的列表。)函数 el.def()是定义新元素的函数。
register_theme_elements()函数有三个参数,…,element_tree 和 complete。新元素,包括名称和逗号分隔的,是第一个参数。参数 element_tree 采用列表类型的向量,其中列表的每个元素都包含与元素定义相同的元素名称集。参数 complete 需要一个逻辑向量。如果设置为 TRUE,缺少的主题参数将设置为 NULL。如果设置为 FALSE,参数不一定从空列表继承。默认值为 TRUE。
reset_theme_settings()函数有一个参数 reset_current。这个论点需要一个逻辑向量。如果设置为 TRUE,当前主题将重置为默认主题。如果设置为 FALSE,则仅删除添加的元素。
get_element_tree()函数没有参数。该函数返回元素树。元素树是主题()的元素(参数)的两级列表。元素的名称位于顶层。对于每个元素,元素的类、元素的继承路径和元素的描述(可以为空)都在第二层。对于我在 RStudio 中的当前会话,元素树的长度是 98。
函数的作用是:定义元素。该函数接受三个参数,class,表示元素的类;inherit,为继承路径;和 description,用于元素的描述(通常为空)。
class 参数接受一个字符向量。我的电脑上的当前元素列表中的值是“边距”、“element_line”、“element_rect”、“element_text”、“unit”、“character”和“logical”。
根据 el_def()的帮助页面,字符串“character”和“margin”是保留字。“字符”的含义是一个字符或数字向量。“margin”的含义是一个四元素向量,就像函数 margin()创建的那些向量一样。
同样,“element_line”、“element_rect”、“element_text”分别具有运行 element_line()、element_rect()和 element_text()的结果的形式。“unit”类以调用网格包中的函数 unit()的形式出现。
参数 inherit 接受 NULL 值或一个字符向量,给出新定义的元素所继承的元素。参数描述采用 NULL 值或包含新定义元素描述的字符向量。
8.2 审美功能
审美功能影响绘图的内容。有四个函数可以设置美学–AES()、aes_()、aes_q()和 aes_string()。aes_()、aes_q()和 aes_string()函数共享一个帮助页面,并被描述为引用美学变量,以使变量编程更容易。我们这里只讲 aes()。有关这三个函数的更多信息,请参见其他函数的帮助页面。
在 ggplot()和添加的函数中,要绘制的变量作为美学输入。描述符(像点大小和颜色)也可以作为美学输入。可以通过三种方式调用 aes()函数-在调用 ggplot()时,在调用 ggplot()后添加一个+运算符(在任何层),或者在几何或统计函数中设置。在 ggplot()、几何函数或统计函数中设置时,aes()所赋的参数名是 mapping。
aes()函数接受两个指定的参数 x 和 y,以及所绘制的特定函数所需的任何其他变量。此外,描述性参数可以包含在对 aes()的调用中,如前所述。
虽然 x 和 y 在 aes()函数调用中首先列出,并且通常不按名称分配,但必须为其他参数分配正在绘制的函数所使用的名称。参数的长度必须为 1 或等于要绘制的变量的长度,通常是 x 和 y 的长度。(有时 x 和/或 y 没有设置,这取决于要绘制的函数。如果 x 和 y 都未设置,则绘制由正在绘制的函数指定的另一个变量。)
根据 aes()的帮助页面,函数 aes()是一个引用函数。由于 ggplot2 中的函数通常用于数据框,因此数据框中的各种变量不需要属于同一原子类。通过引用变量,所有变量都具有相同的类型(字符),这使得使用变量更加容易。
在 aes()的帮助页面中,请参阅 rlang 包中 nse-force 的帮助页面和 dplyr::programming vignette,以了解有关使用 quasiquotation 编程的信息,如果变量是使用 quoting 函数创建的,则必须使用 quasi quotation。此外,在 aes()的帮助页面中,当从另一个函数中调用 ggplot()和其他相关函数时,引用变量会出现问题。另一个功能叫做包装器。有关包装器的更多讨论和一些示例,请参见帮助页面。
r 有四个描述美学组的帮助页面。此外,R 还有一个小插图,描述了许多美学的可能价值。(对于晕影,在 R 提示符下输入vignette("ggplot2-specs")。)
第一个帮助页面是aes_colour_fill_alpha–关于颜色、填充和 alpha 美感。请参阅第 3.4.1 节、前面的帮助页或前面的插图中有关颜色、填充和 alpha 所取值种类的描述。
第二个帮助页面是aes_linetype_size_shape,关于线型、尺寸和外形美观。请参见第 3.3.2 和 3.4.3 节、前面的帮助页或前面的插图中对 lty、cex 和 pch 的描述,了解线型、尺寸和形状所采用的值的种类。
第三个帮助页面是aes_position,用于给出图中位置的参数。这些参数是 x、y、xend、yend、xmin、ymin、xmax 和 ymax。x 和 y 参数给出了点的 x 和 y 位置,在大多数图中使用(一个或另一个或两个)。x 和 y 通常没有默认值。
xend 和 yend 参数给出了曲线和线段的端点。曲线和线段从 x 和 y 位置开始,在 xend 和 yend 位置结束。xend 的长度必须是 1 或 x 的长度,这同样适用于 y 和 yend 的长度。xend 和 yend 没有默认值。
xmin、ymin、xmax 和 ymax 参数给出了要在图上绘制的矩形的角或要放在图上的图像的角。参数采用长度为 1 或等于 x 和 y 长度的数值向量。这两种可能的长度可以在四个参数之间混合。
如果一个或多个角超出绘图限制,在 aes()内设置四个参数会导致绘图限制扩大。将四个参数设置在 aes()之外不会扩大绘图限制。相反,矩形或图像在轴上被切断。
xmin、xmax、ymin 和 ymax 没有默认值。有关定位参数的更多信息,请参见帮助页或插图。
第四个帮助页面是aes_group_order,用于创建图或按组设置图的特性。在 plot()中,by 参数告诉 plot()按变量组进行绘制。例如,箱线图可以根据分配给的变量值绘制在单独的图中。在 ggplot2 包中,类似的变量是审美参数组。
因为组是一个美学参数,所以组的长度必须是 1 或要绘制的对象的长度。根据帮助页面,组的默认值是分配给数据的数据框中的离散变量的相互作用。有关组参数的更多信息,请参见帮助页或插图。
对于其他描述性论点,可以基于组来分配不同的审美价值。可以将描述性参数设置为长度等于要绘制的对象长度的变量。变量将包含对描述性参数合法的值组。然后,绘图函数将根据 vector 中的组分配参数的特征(就像函数 plot()对 par()中的许多参数所做的那样)。根据aes_group_order,的帮助页面,可根据变量值设置为不同值的美学有 x、y、颜色、填充、alpha、形状、大小和线型。
在 par()中称为 adj、str、col、fg、bg、lty、lwd、cex 和 pch 的描述符可以作为美学输入到 ggplot2 中,其名称特定于 ggplot2。相应的名称是 hjust、angle、color(或 color)、color(或 color)、fill、linetype、size、size 和 shape。(如果在引号内输入 par()名称,函数 aes_all()显示从 ggplot2 名称到 par()名称的转换。)
par()中的 col 和 fg 参数在 ggplot2 函数中都被命名为 color(或 color)。哪个绘图属性将由颜色参数着色取决于设置颜色的函数的类型。类似地,par()中的 lwd 和 cex 所引用的属性的大小取决于 size 参数所在的函数类型。
所有的美学都可以在调用 aes()之外的几何函数中输入,并且不在指定的数据帧中。但是,在 aes()之外设置的参数必须分配给运行 R 的环境中的对象或表达式。在 aes()函数之外设置的参数无权访问分配给数据的数据框。
如果在对 aes()的调用中输入了描述性参数,则会为分配给该描述性参数的变量中的不同组创建一个图例。如果未在对 aes()的调用中设置,则不会创建图例。通过将一些描述性参数放在对 aes()的调用中,将其他参数放在调用之外,可以选择使用哪种美学来创建图例。为 aes()调用中的每个参数绘制一个图例。请注意,在 aes()中设置的描述性参数的行为并不总是与在 aes()之外设置变量的行为相同。
在清单 8-4 中,给出了在几何函数 geom_point()中使用美学的示例代码。函数 geom_point()包含在第九章中。功能 scale_size()和 guide_legend()用于改变图例,在第十章中有所介绍。
gray.scale=gray(
c( 80, 70, 55, 35 )/100
)
cdpi = (21:24)[
cut( LifeCycleSavings$dpi, 4 )
]
dpi.quantiles=floor(
quantile(
LifeCycleSavings$dpi,
c(
12.5, 37.5, 62.5, 87.5
)/100
)
)
ggplot(
data=data.frame(
LifeCycleSavings,
size=cdpi-18.5
),
aes(
pop75,
pop15,
size
)
) +
theme(
plot.margin=margin( 0.5, 0.5, 0.5, 0.5, "inches" )
) +
geom_point(
aes(
size=size
),
fill=gray.scale[ cdpi-20 ],
shape=cdpi
) +
scale_size(
breaks=c( 2, 3, 4, 5 )+0.5,
label=paste0( "$", dpi.quantiles ),
guide=guide_legend(
override.aes=list(
shape=21:24,
fill=gray.scale
)
),
name=
"Disposable\nPersonal\nIncome\n\n(median of\nquartile)\n",
range=c( 2.5, 5.5 )
) +
labs(
title="Example of Aesthetics with a Legend"
) +
xlab(
"% Population > 75 Years of Age"
) +
ylab(
"% Population < 15 Years of Age"
)
Listing 8-4Code for the example of using aesthetic arguments in geom_point()
在图 8-4 中,运行清单 8-4 中的代码。使用生命周期保存数据集中的 pop75、pop15 和 dpi 变量给出了一个图(参见第 3.1 节)。
图 8-4
在几何图形 geom_point()中使用美学尺寸、形状和填充的示例
请注意,该图周围有 0.5 英寸的边距。此外,参数大小是在对 aes()的调用中设置的,而 shape 和 fill 是在调用之外,因此只绘制一个图例。函数 scale_size()用于改变图例项的形状和填充颜色,以及图例项的标签和标题。
九、几何、统计、标注和borders()函数
几何、统计、标注和borders()函数创建绘图内容。这些函数在图形上打开新图层并绘制新信息。所有以 geom_ 开头的几何函数,创建了许多可以用 ggplot2 包创建的绘图类型中的大多数。统计函数都以 stat_ 开始,创建和添加图形。这些函数在绘图前以统计方式减少数据。注释函数,即函数 annotate()或以 annotation_ 开始,提供了一种简单的方法来注释用 ggplot()创建的图。borders()函数为格式正确的地图对象添加边框。
本章有四节。第一部分介绍几何函数,第二部分介绍统计函数,第三部分介绍注记函数,第四部分介绍 borders()函数。
9.1 几何函数
几何函数是 ggplot2 包中最基本的绘图函数。几何函数被格式化为 geom_ 扩展(),其中扩展是几何的名称(例如,几何 _abline()用于 abline 几何)。几何函数的名称描述了该函数绘制的内容。表 7-1 列出了 48 个几何函数的扩展名,以及这些函数的功能描述。
几何函数通过+运算符或%+%运算符添加到绘图函数中(参见第 7.1.1 节)。本节给出了关于几何函数和几何函数帮助页面的一般信息。
如果已在 ggplot()中分配了数据和映射参数,并且 ggplot()中的映射包含几何函数所需的所有参数,则几何函数可以使用 ggplot()调用中的数据和映射信息。然后可以不带参数调用几何函数。
然而,所有几何函数的前两个参数是映射和数据,用于美学和数据框架。默认情况下,除了三个简单的要素几何函数之外,这两个函数都为空。对于 geom_sf()、geom_sf_label()和 geom_sf_text(),映射的值是 aes()。
大多数几何函数都有一个名为 stat 的参数,该参数被赋予一个统计函数的名称,该名称用引号括起来。例如,名称"identity"用于 stat_identity()函数(有关统计函数的信息,请参见第 9.2 节)。因为不止一个几何图形具有相同的 stat 值,所以使用 static 函数可能会减少对几何图形函数进行编码的工作量。两个几何函数 geom_qq()和 geom_qq_line()具有参数 geom–在这种情况下,geom 为 geom_path()几何函数取值“path”。
大多数几何函数也有一个名为 position 的参数。位置参数采用长度为 1 的字符向量。向量包含位置函数的名称,通常是“身份”。位置函数的命名方式与统计和几何函数相同——前缀为 position _ 后跟名称。位置函数告诉 R 如何在图上放置由几何函数生成的信息。位置的可能值为“减淡”、“减淡 2”、“填充”、“标识”、“抖动”、“抖动减淡”、“微移”和“堆叠”。
大多数几何函数采用参数 na.rm、show.legend 和 inherit . AES。na . RM 参数告诉 R 当程序删除丢失的值时是否警告用户。该参数采用长度为 1 的逻辑向量。如果设置为 FALSE,则会给出警告。如果设置为 TRUE,则不会给出警告。如果参数存在于参数列表中,则默认值为 FALSE。
show.legend 参数告诉 R 是否将几何函数打开的图层包括在绘图的图例中。如果设置为 NA,则在几何函数中使用美学函数时会包括该层。如果设置为 FALSE,则不包括该层。如果设置为 TRUE,则始终包括该图层。如果在几何函数内调用的 aes()函数中包含多个美学变量,则逻辑向量的长度可以大于 1。每个逻辑值必须用要包含或不包含的参数的名称来命名。当 show.legend 包含在参数列表中时,show.legend 的默认值为 NA。
inherit.aes 参数告诉 R 是添加到 aes()的 ggplot()调用中定义的美学变量列表中,还是在 geometry 函数中设置一组新的变量。如果设置为 TRUE,几何函数美学与 ggplot()美学相结合。如果设置为 FALSE,将建立一个新的美学。当参数包含在参数列表中时,inherit.aes 的默认值为 TRUE。
其他指定的参数随几何函数而变化。例如,在 geom_abline()中,存在参数 slope 和 intercept,但没有默认值。必须为参数赋值,函数才能运行。前面文本中没有列出的一些指定参数在许多函数中使用,但是除了前面文本中列出的参数之外,大多数函数中都没有指定的参数。
变元…用于美学变元以及未具体列出的几何函数的任何参数。所有的几何函数都有…参数。
可用于几何功能的美学在该功能的帮助页面上列出,或者在从几何功能的帮助页面链接的帮助页面上给出。例如,对于 geom_abline(),可能的美学变量是 alpha、颜色、线型、大小、坡度和截距。有时候,只列出一些可能的审美。
对于大多数帮助页面,美学以项目符号列表的形式列出,必须提供的美学以粗体字体列出。对于许多帮助页面来说,页面涵盖了不止一个功能。通常,美学列表名义上只针对一个功能。假设,在只给出一个函数名的情况下,美学适用于帮助页面上的所有函数。大多数帮助页面还提供了由几何函数计算的各种值。
9.2 统计功能
统计函数对数据集执行统计归约并绘制结果。统计函数的行为与几何函数非常相似。ggplot2 包中列出了 33 个统计函数(有几个被弃用、删除或重复)。
与几何函数一样,统计函数的前两个参数是映射和数据。对于所有的统计函数,除了简单特征函数 stat_sf_coordinates()的映射值之外,映射和数据的默认值都是 NULL。对于 stat_sf_coordinates(),映射默认采用值 aes()。
所有统计函数都有一个名为 geom 的参数,这是几何函数的名称。geom 的值是几何函数的名称扩展的引用值。例如,对于几何函数 geom_bar(),geom 被设置为等于“bar”。不同的统计函数可以具有相同的 geom 值。
大多数统计函数都采用 position、na.rm、show.legend 和 inherit.aes 参数。position 参数与几何函数具有相同的含义,并采用相同类型的值。na.rm、show.legend 和 inherit.aes 参数采用与几何函数中相同的类型和默认值。
统计函数的帮助页面描述并不总是给出函数可能使用的美学列表。通常,几何函数和统计函数共享同一个帮助页面,并且只列出了几何函数的美学参数。据推测,相应的统计函数也可以使用这些参数。美学函数的行为方式与几何函数的行为方式相同。
在表 9-1 中,列出了统计函数及其描述。原始表来自 ggplot2 包的函数列表。
表 9-1
ggplot2 包中的统计函数及其说明
|统计函数
|
描述
| | --- | --- | | stat_bin ( ) | 查找落在由 x 或 y 变量构造的箱中的观察值的数量或标准化数量。只能设置 x 和 y 中的一个。计数被标绘。 | | stat_bin2d ( ) | stat_bin_2d 的旧名称。 | | stat_bin_2d ( ) | 查找落在由交叉的 x 和 y 变量构建的条柱中的观测值的数量。必须设置 x 和 y。在箱的中间绘制正方形。正方形根据箱中的观察数量进行着色。不绘制没有观测值的条柱。 | | stat_binhex( ) | stat_bin_hex()的旧名称。 | | stat_bin_hex( ) | 与 stat_bin_2d 相同,只是使用了六边形而不是正方形作为容器。 | | stat_boxplot( ) | 查找箱线图使用的值并绘制箱线图。x 或者 y 都可以装箱。应设置 x 或 y,但不能同时设置两者。使用 Tukey 使用的方法。 | | stat_contour() | 在二维图上绘制等高线。必须设置美学 x、y 和 z。分配给 z 的值在分配时必须命名为 z。变量 x 和 y 应该(至少近似地)等间距递增。绘制了 z 值的等高线。 | | stat_contour_filled() | 与 stat_contour()相同,只是等高线之间的区域用渐变颜色填充。 | | stat_count() | 查找并绘制变量 x 或 y 中共享一个值的观察值的数量。创建条形图。只使用 x 和 y 中的一个。 | | 统计密度( ) | 查找并绘制 x 或 y 的核密度估计值–只能有一个在 aes()的 ggplot()中。如果 x 存在,密度在 x 轴上。对于 y,密度在 y 轴上。 | | stat_density2d() | stat_density_2d()的旧名称。 | | stat_density2d_filled() | stat_density_2d_filled()的旧名称。 | | stat_density_2d() | 绘制基于 x 和 y 值的内核密度估计值的等值线图,这两个值都必须设置。 | | stat_density_2d_filled() | 与 stat_density_2d()相同,只是轮廓之间的区域用渐变颜色填充。 | | stat_ecdf() | 绘制分配给 x 的向量的经验累积密度函数。如果设置了 y,y 轴将被命名为分配给 y 的变量的名称,但 y 没有其他作用。必须设置参数 x。可以设置参数 y。 | | stat_ellipse( ) | 围绕二维数据绘制置信椭圆。必须设置 x 和 y。 | | stat_function() | 绘制一个变量的 R 函数。该函数必须是一对一的映射。参数 x 和 y 可以在 stat_function()或 ggplot()中设置。如果两者都设置了,x 将用作函数的输入。参数 fun 可以是函数名或函数定义,必须给出。赋值 fun=cos,fun="cos "和 fun=function(x) cos(x)都给出相同的结果。该功能可以由用户定义。 | | 统计标识( ) | 绘制几何函数。默认情况下,会绘制散点图,并且必须设置 x 和 y。参数 x 和 y 不会被转换。 | | stat_qq( ) | 绘制数据向量相对于分布分位数的分位数图(默认为标准正态)。唯一必须设置的参数是 sample——用于将数据向量与分布进行比较。 | | stat_qq_line() | 绘制分位数-分位数线。可以设置分布函数,但默认为 qnorm()(在 stats 包中)。必须设置数据向量样本。 | | stat_quantile ( ) | 绘制 x 和 y 上的分位数回归结果。x 和 y 都必须设置。 | | stat_sf( ) | 打开一个带有 sf(简单要素)类对象坐标和统一背景的图形。sf 对象的美学参数名称是 geometry。由 geom_sf()用于打印 sf(简单要素)类的对象。 | | 统计坐标( ) | 打印 sf(简单要素)类对象的要素坐标。sf 对象的美学参数名称是 geometry。 | | stat_smooth() | 在 x 和 y 坐标上绘制点的平滑版本。必须设置 x 和 y。用于平滑的方法由 method 参数设置。 | | stat_spoke() | 此函数已被否决。使用 geom_spoke()。 | | stat_sum() | 在 x 和 y 坐标上绘制点,其中绘制内容的特性取决于特定点处的观察次数。必须设置 x 和 y。默认情况下,会绘制黑色圆,并且这些圆的大小各不相同。还绘制了一个图例,其中包含属性的键。 | | 统计摘要( ) | 对于每个 x 值,绘制与 x 值相关的 y 值的函数。x 和 y 都必须设置。参数 fun 设置函数(默认情况下,绘制平均值加上和减去平均值的标准误差)。 | | stat_summary_bin() | 与 stat_summary()相同,只是 x 值被聚合到箱中。必须设置 x 和 y。bin 的数量由参数 bin 设置,默认值为 30。 | | stat_summary2d() | stat_summary_2d()的旧名称。r 要求使用函数 stat_summary_2d。 | | 统计 _ 汇总 _ 二维( ) | 为 x 和 y 点的每个箱绘制一个正方形,正方形的颜色基于应用于箱中 z 值的函数。必须设置 x、y 和 z。为应用于 z 的函数值绘制图例。(使用参数 bin 或 binwidth,根据水平和垂直坐标将绘制区域分割成多个条柱。函数由自变量 fun 给出。) | | stat_summary_hex() | 与 stat_summary_2d()相同,只是箱子是六边形而不是正方形。 | | stat _ 唯一( ) | 绘制 x 和 y 中唯一值的散点图。x 和 y 都必须设置。 | | 统计密度( ) | 策划一场小提琴阴谋。必须设置参数 x 和 y。参数组可以设置为按组绘图。 |
关于统计函数的更多信息可以在函数的帮助页面中找到。请注意,有些参数是美学参数,必须输入到美学函数中,有些参数是绘图函数的参数,但不包括在美学函数中,有些参数可以是两者都有。
只能设置在参数或美学列表(除了一些不完整的美学列表)中的帮助页面上定义的参数,但是在运行 ggplot()的环境中使用参数的表达式可以在赋值的右侧使用。
9.3 注释功能
批注函数 annotate()、annotation_custom()、annotation_logticks()、annotation_map()和 annotation_raster()将批注放置在绘图上。annotate()函数使用几何函数,并从环境而非指定的数据框中获取几何函数的数据。运行几何函数的结果被放置在图上 annotate()中指定的位置。
annotation_custom()函数获取一个网格图形对象(grob——本质上是一个完全指定的绘图),并将该对象放在现有绘图的指定位置。annotation_logticks()函数在一个或两个轴上放置对数刻度。函数的作用是:在一个存在的图上绘制一个地图边界。annotation_raster()函数在绘图上的指定位置绘制光栅图像。
本节分为四小节。这些小节首先涵盖了 annotate()函数;二、annotation_custom()函数;三、annotation_logticks()函数;第四,annotation_map()和 annotation_raster()函数。
annotate()函数
annotate()函数使用几何函数在现有地块上创建新地块。如果新图的位置超出或部分超出原始图的限制,annotate()会扩展原始图的轴以包含两个图。几何函数使用的美学参数可以在 annotate()中使用。除了 x 和 y,美学参数只影响新的绘图,不影响任何现有的图例(根据 annotate()的帮助页面)。
新地块的位置单位是原始地块的单位。例如,如果 x 轴从 0 到 5,y 轴从 20 到 50,则新图的 x 轴相对于 0 到 5 放置,而新图的 y 轴相对于 20 到 50 放置。
annotate()函数接受十个指定的参数加上未指定的美学参数以及 geometry 函数使用的任何参数。分配给参数的值可以从运行 R 的环境中获取,但不能从分配的数据帧中获取。十个参数是 geom,用于几何函数;x 和 y,用于几何函数使用的 x 和 y 坐标;xmin、xmax、ymin 和 ymax,表示放置地块的位置;xend 和 yend,如果几何函数是 geom_curve()或 geom_segment(),用于曲线和线段的端点;和 na.r,用于在缺失点被移除时是否给出警告。第十个参数是…,用于未指定的美学参数和几何函数使用的参数。
geom 参数采用长度为 1 的字符向量。向量包含用引号括起来的几何图形的名称。例如,设置 geom 等于“点”以使用 geom_point(),或者设置 geom 等于 gg 且 gg 等于“文本”以使用几何函数 geom_text()。geom 没有默认值。
x、y、xmin、xmax、ymin、ymax、xend 和 yend 参数在 8.2 节中介绍。根据 annotate()的帮助页面,必须至少设置一个参数。参数的默认值都是 NULL。
其他的美学观点也在第 8.2 节中讨论。annotate()使用的几何函数的参数在第 7.2、9.1 和 9.2 节中介绍。
na.rm 参数采用长度为 1 的逻辑向量。如果设置为 TRUE,则在由于丢失数据而删除观察时不会给出警告。如果设置为 FALSE,则会给出警告。na.rm 的默认值为 FALSE。
在清单 9-1 中,给出了用 geom_text()函数调用 annotation()的例子中使用的代码。随机方法用于选择数据集生命周期中的哪些观察值需要绘制。
sel = sample(
1:50,
15
)
ggplot(
LifeCycleSavings[ sel, ],
aes( pop75, pop15 )
) +
geom_point(
) +
annotate(
"text",
x=LifeCycleSavings$pop75[ sel ]+0.05,
y=LifeCycleSavings$pop15[ sel ]-0.3,
label=rownames(
LifeCycleSavings
)[ sel ],
hjust=0,
vjust=1,
size=3.5
) +
labs(
title="Example of Using annotate() with geom_text()"
)
Listing 9-1Code to annotate a plot with point labels using annotate() with geom_text()
在图 9-1 中,运行清单 9-1 中的代码。请注意,代码运行了几次,直到产生可接受的数据选择。
图 9-1
使用几何函数 geom_text()调用 annotate()以在 50 个观测值中随机选择的 15 个观测值上放置标注的示例
请注意,标注绘制在点的右下方不远处,因为 hjust 设置为 0,vjust 设置为 1,偏移 0.05 添加到 x 位置,偏移 0.3 从 y 位置减去。另请注意,x 和 y 的值包括数据框名称,因为 annotate 不使用任何 aes()调用中的美学设置。文本大小设置为 3.5-文本大小为 3.5 毫米。
9 . 3 . 2 annotation _ custom()和 ggplotGrob()函数
函数的作用是:在指定的位置绘制一个网格图形对象。网格图形对象包含创建完整绘图图形的指令。该对象是通过运行 ggplotGrob()函数创建的。
annotation_custom()函数接受五个指定的参数,没有未指定的参数。参数是 grob——代表网格图形对象——以及 xmin、xmax、ymin 和 ymax,代表放置 grob 值的角。
grob 参数获取调用 ggplotGrob()的输出。ggplotGrob()函数接受一个参数——使用 ggplot()和附加函数的完整绘图调用,例如ggplotGrob( ggplot( LifeCycleSavings, aes( pop75, pop15 ) ) + geom_point() + geom_smooth() )。grob 没有默认值。
xmin、xmax、ymin 和 ymax 参数采用值-Inf 或 Inf 或单元素数值向量。值-Inf 和 Inf 指示 x 轴的左侧和右侧或者 y 轴的底部和顶部(网格图形对象被绘制在其上的图)。
xmin 的值不需要小于 xmax,因为如果两者的顺序错误,annotation_custom()会将两者颠倒。ymin 和 ymax 也是如此。如果 x 和 y 限制部分或全部落在绘制网格图形对象的图的限制之外,则轴不会扩展。xmin 和 ymin 的默认值是-Inf,而 xmax 和 ymax 的默认值是 Inf。
在清单 9-2 中,给出了图 9-2 的代码,这是一个创建和绘制网格图形对象的例子。
图 9-2
在 annotation_custom()中设置网格图形对象的示例
ggplot(
data.frame(
x=0:2,
y=0:2
),
aes(
x=x,
y=y
)
) +
geom_point(
color="transparent"
) +
labs(
title="Example of Using annotation_custom with a grob"
) +
annotation_custom(
grob=ggplotGrob(
ggplot(
LifeCycleSavings,
aes(
pop75,
pop15
)
) +
geom_point(
) +
geom_smooth(
)
),
xmin=0,
xmax=1,
ymin=0,
ymax=1
)
Listing 9-2Code for the example of running annotation_custom() that is in Figure 9-2
在图 9-2 中,运行清单 9-2 中的代码。annotation_custom()函数用于由调用 ggplot()和两个几何函数组成的网格图形对象。
请注意,网格图形对象上的单位不同于背景图的单位。在背景图中,颜色设置为“透明”,因此设置轴比例的三个点不可见。还要注意,网格图形对象在 x 轴和 y 轴上的位置被 xmin、xmax、ymin 和 ymax 设置为 0 到 1 之间。在这两个图中,都使用了默认主题。对于两个几何图形,也使用默认值。
9 . 3 . 3 annotation _ log ticks()函数
annotation_logticks()函数将对数刻度的刻度线放在绘图上。对数刻度可以放在图的任何一个或所有四个边上。可以在一侧绘制三个不同大小的刻度线,用于三个不同的间隔级别。该函数可以与函数 scale_x_log10()、scale_y_log10()和 coord_trans()一起使用。
annotation_logticks()函数接受 12 个指定的参数和一些未指定的美学参数。…参数是参数顺序中的最后一个参数。前 12 个参数是 base,表示对数的底数;侧边,用对数刻度标注哪一侧(哪些侧边);外部,用于将刻度线绘制到地块内还是远离地块;缩放,表示在创建图之前数据是否已进行对数缩放;短、中和长,用于三个间隔级别的刻度线的长度;以及标准的颜色、大小、线型、alpha 和颜色美学参数。
基本参数采用长度为 1 的正数值向量。base 的默认值是 10。
sides 参数接受长度为 1 的字符向量。该值必须是字母 b、l、t 和 r 的组合,代表图的底部、左侧、顶部和右侧。例如,使用“bl”在底部和左侧放置一个对数刻度。边的默认值是“bl”。
外部参数采用长度为 1 的逻辑向量。任何其他长度都会给出警告。如果设置为 TRUE,并且在 coord_cartesian()中将 clip 设置为“关”,则记号将远离绘图绘制。如果设置为 FALSE,刻度将绘制到绘图中。outside 的默认值为 FALSE。
缩放参数采用长度为 1 的逻辑向量。根据 annotation_logticks()的帮助页面,如果通过对变量运行 log10()在绘图前转换具有对数刻度的变量,或者如果调用 scale_x_log10()和/或 scale_y_log10(),则 scaled 设置为 TRUE。如果调用 coord_trans()时 x 和/或 y 设置为“log10 ”,则 scaled 应设置为 FALSE。scaled 的默认值为 TRUE。
short、mid 和 long 参数分别从对 unit()函数的单次调用中获取输出,该函数位于网格包中。(最短的刻度线与标尺上最小的宽度划分间隔相关联;具有中间宽度划分间隔的中音;并且最长的具有最大的宽度分割间隔。)short、mid 和 long 的默认值分别是单位(0.1,“厘米”)、单位(0.2,“厘米”)和单位(0.3,“厘米”)。
color(或 colour)参数采用长度为 1 的颜色向量(参见 3.4.1 节了解颜色向量的种类)。颜色的默认值是“黑色”。
size 参数接受一个长度为 1 的非负数值向量。该值以毫米为单位给出刻度线的线宽。大小的默认值为 0.5。
线型参数采用长度为 1 的线型向量(参见第 3.3.2 节和线型值参数 lty)。线型的默认值为 1(对于实线)。
alpha 参数采用一个长度为 1 的数值向量,该向量必须介于 0 和 1 之间(包括 0 和 1)(有关如何使用 alpha 的说明,请参见 3.4.1.2 一节)。alpha 的默认值为 1,即刻度线是不透明的。
在清单 9-3 中,给出了使用 annotation_logticks()和 scale_y_log10()的示例代码。
ggplot(
LifeCycleSavings,
aes(
pop75,
dpi
)
) +
scale_y_log10(
) +
geom_point(
) +
geom_smooth(
) +
labs(
title="Example of Using annotation_logticks()"
) +
annotation_logticks(
side="l"
)
Listing 9-3Code for the example in Figure 9-3 of using annotation_logticks() with scale_y_log10()
在图 9-3 中,运行清单 9-3 中的代码。运行 geom_point()和 geom_smooth()。
图 9-3
将 annotation_logticks()与 scale_y_log10()、geom_point()和 geom_smooth()一起使用的示例
请注意,geom_point()和 geom_smooth()都运行。如果通过运行 coord_trans( y="log10 ")并在 annotation_logticks()中将 scaled 设置为 TRUE 来设置对数比例,则 geom_smooth()会给出一个错误。
根据 coord_trans()的帮助页面,scale_y_log10()在转换要打印的对象以进行打印之前运行,而 coord_trans()在转换之后运行。(参见帮助页面的示例部分,了解 ggplot2 中三种日志转换变量的方式。)
9 . 3 . 4 annotation _ map()和 annotation_raster()函数
annotation_map()函数将地图与几何和/或统计函数一起放在绘图上。annotation_raster()函数将栅格对象放置在绘图的给定位置。annotation_map()函数需要正确格式的数据框。annotation_raster()函数需要一个栅格对象或一个值介于 0 和 1 之间(包括 0 和 1)的对象。
annotation_map()函数接受一个指定的参数和一个未指定的美学参数。一个参数是 map——用于标注地块的地图。参数值必须采用正确的格式。annotation_map()的正确格式可以通过函数 map_data()来完成。
也可以打印计算机文件夹中的形状文件或空间文件。通过使用 readOGR()函数将文件读入 R,可以将文件转换成 map_data()的正确格式,该函数在 rgdal 包中。
可以在 annotation_map()中使用的其他参数是描述性美学参数。请参见第 8.2 节了解美学观点的描述。
在清单 9-4 中,给出了生成图 9-4 中的图的代码。世界地图在地图包里。
图 9-4
将 annotation_map()与 geom_point()一起使用的示例,其中不绘制点
library( maps )
full_world = map_data(
"world"
)
ggplot(
data.frame(
long=c(
-180,
179
),
lat=c(
-90,
90
)
),
aes(
x = long,
y = lat
)
) +
theme_classic(
) +
theme(
panel.border=element_rect(
color="black",
fill="transparent",
size=0.3
),
axis.line=element_line(
size=0
)
) +
geom_point(
color="transparent"
) +
labs(
title="Example of Using annotation_map() with geom_point()"
) +
annotation_map(
full_world,
colour="grey30",
fill="white"
)
Listing 9-4Code for the example in Figure 9-4 of using annotation_map() to put a map on a plot
在图 9-4 中,运行清单 9-4 中的代码。必须加载地图包才能运行代码。
请注意,该地图是地图包中的世界地图。在 ggplot()中,要绘制的经度和纬度范围是在对 data.frame()的调用中设置的。ggplot()中的 aes()函数将 x 设置为经度变量,将 y 设置为纬度变量。
主题设置为 theme_classic(),没有网格,背景为白色。在添加到对 theme_classic()的调用中的对 theme()的调用中,添加了边框,删除了轴线。
使用 geom_point()打印会创建在其上打印 annotation_map()的背景。轴被设置为透明,由 geom_point()绘制的点也是如此。在对 annotation_map()的调用中,地块线的颜色设置为深灰色,地图的填充颜色设置为白色。
annotation_raster()函数接受六个指定的参数,没有未指定的参数。六个参数是 raster,用于栅格对象;xmin、xmax、ymin 和 ymax,用于光栅图像的角;和插值,用于在打印光栅对象时是否插值。
raster 参数采用 raster 或 nativeRaster 类的向量、矩阵或数组,或者取值在 0 和 1 之间(包括 0 和 1)的数值向量、矩阵或数组。栅格没有默认值。如果 raster 是一个数组,而不是一个矩阵,则该数组必须是三维的,并且第三维的长度必须是 3 或 4。前两个维度包含要绘制的三个或四个矩阵。
raster 类的对象包含颜色字符串值,例如,“#FFFFFF”或“black”。nativeRaster 类的对象的值也包含透明度级别,例如,“#FFFFFFAA”,其中“AA”给出透明度级别。(有关颜色字符串和透明度的更多信息,请参见 3.4.1.1 部分。)
xmin、xmax、ymin 和 ymax 参数的行为类似于 annotation_custom()中的相同参数(参见第 9.3.2 节)。xmin、xmax、ymin 和 ymax 没有默认值。
interpolate 参数采用逻辑向量。如果设置为 TRUE,则在绘制矩阵单元时进行插值。如果为 FALSE,这些单元格将被视为颜色不变的单元格。插值的默认值为 FALSE。
9.4 borders()函数
borders()函数是打开图层的最后一个函数。ggplot()打开一个图后,borders()可用于在图上放置地图。不需要附带的几何、统计或注释功能。borders()函数绘制地图包中的地图或类似对象。(要查看地图包的内容,请在 RStudio 的右下方窗口中单击 Packages 选项卡下的地图链接,或者在 R 控制台的 R 提示符下输入help( package="maps" )。必须首先安装软件包。)
borders()函数采用六个指定的参数加上 geom_polygon()的参数(参见 7.2 和 9.1 节)。六个指定的参数是 database,供数据库使用;区域,用于绘制数据库的区域;填充,用于填充地图的颜色;颜色,用于边框的颜色;以及 xlim 和 ylim,用于绘图要使用的经度和纬度范围。
数据库参数采用单元素字符向量。字符串通常是地图包中数据库的名称,用引号括起来。不过其他 R 包里有地图数据库。要访问另一个包中的数据库,请在带引号的字符串中包含包名(包名和数据库名之间有两个冒号)。database 的默认值是“world”,表示世界各国的数据库。
regions 参数采用一个包含要绘制的区域名称的字符向量。要查看可用区域,请运行 map()函数,将数据库名称和参数 namesonly 设置为 TRUE,将 plot 设置为 FALSE。对于子区域,包含区域名称作为第二个参数。例如,要查看美国华盛顿州的子区域,运行map( "state", "washington", namesonly=TRUE, plot=FALSE )。区域的默认值是“.”,即数据库中的所有区域。
填充和颜色(不使用颜色)参数采用一个单元素颜色值向量(参见第 3.4.1 节)。对于可能的颜色值)。填充的默认值是 NA,颜色的默认值是“灰色 50”。
xlim 和 ylim 参数采用两个元素的数值向量。不需要设置参数。xlim 和 ylim 的缺省值是 NULL,即 borders()函数生成良好的限制。
在清单 9-5 中,给出了图 9-5 中使用 borders()和 ggplot()的示例代码。
图 9-5
在调用 ggplot()后调用 borders()并在地图包中选择世界数据库的所有区域的示例
library( maps )
full_world = map_data(
"world"
)
ggplot(
full_world,
aes(
long,
lat
)
) +
theme_classic(
) +
theme(
axis.line=element_line(
size=0
),
panel.border=element_rect(
color="black",
fill="transparent",
size=0.25
)
) +
borders(
"world",
".",
fill="white",
colour="grey40"
) +
scale_x_continuous(
breaks=c( -180, -90, 0, 90, 180 ),
labels=c( "180", "90W", "0", "90E", "180")
) +
scale_y_continuous(
breaks=c( -90, -45, 0, 45, 90 ),
labels=c( "90S", "45S", "0", "45N", "90N")
) +
labs(
title="Example of Using borders() with ggplot()"
)
Listing 9-5Code for the example, in Figure 9-5, of using borders() with ggplot()
在图 9-5 中,运行清单 9-5 中的代码。使用世界数据库,并选择所有区域。
请注意,世界数据库通过函数 map_data()转换为数据框,该数据框用作 ggplot()中数据的值。
美学参数 x 和 y 的变量是 long 和 lat(经度和纬度)。主题 theme_classic()给出了一个简单的背景,但是移除了轴,并添加了一个边框,同时调用了 theme()(用于更新 theme_classic())。
在对 borders()的调用中,设置了世界数据库,并绘制了所有区域边界(通过将数据库设置为“世界”并将区域设置为)。”).填充颜色设置为白色,边框颜色设置为深灰色。
scale_x_continuous()和 scale_y_continuous()(见第十章)用于在轴上放置漂亮的断点和标签。默认断点包括经度 200,这是没有意义的。
十、格式化和打印管理工具
本章介绍了选择绘图外观的多种方法、一些分组和计算工具、为特定对象类创建自动功能以及创建面向对象的原型功能。这一章分为三节。
第一部分概述了 scale_、coord_、guide_ 函数以及相关函数。第二部分介绍了将数据向量分成层次、汇总数据向量以及通过分面变量来分面数据向量的函数。第三部分介绍保存、绘图、打印和自动绘图的功能,以及创建面向对象的原型。
10.1 使用 scale_、coord_ 和 guide_ 功能
本节首先介绍 scale_ functions,它影响图周围和图内的颜色、大小、形状和线型。scale_ functions 为影响图中点和线外观的属性设置比例,还可以设置与比例相关的图例属性。
第二小节讲述如何控制影响外观的功能的应用顺序。第三小节是关于格式化轴,带有 scale_ 和 coord_ 函数。第四小节介绍 guide_ functions,它允许用户设置一个包含多个格式化函数的预设格式。
10.1.1 影响颜色、尺寸、形状和线型的比例函数
比例函数设置影响点和线的透明度、颜色、填充颜色、大小、形状或线型的值的比例。比例函数的名称采用 scale_ 的形式,后跟特征名称(alpha、颜色、色彩、填充、线型、形状、半径或大小),通常后跟限定符。
刻度通常应用于成组的点或线,但也可以应用于未分组的数据。对于数字数据,无论是否按组,可用的刻度类型为普通刻度或分级刻度。对于分级比例,将数值数据分级,并绘制分级属性。对于分类数据——无论是因子对象还是字符对象——只有离散标度可用。(Factor 对象可以通过函数 as.numeric()转换为数字对象。)
对于 ggplot2 包中的许多功能,这些功能没有帮助页面。相反,该函数的帮助页是另一个函数的帮助页,它给出了该函数的参数。例如,scale_alpha_date()会打开 scale_alpha()(以及其他一些不包含 scale_alpha_date()的 scale_alpha_ functions)的帮助页面。但是,scale_alpha_date()是一个函数,如果 scale 用于 date 类的向量,则可以调用它。本书只介绍带有帮助页面的功能。
大多数前述特征使用的两个限定符是 identity 和 manual。特性 alpha、颜色、色彩、填充、线型、形状和大小对于限定词 identity 和 manual 具有缩放功能。
注意,为了在比例函数中使用美学自变量,组自变量和/或特征自变量必须被设置为美学函数中的变量。美学函数必须在对前面的几何函数或统计函数的调用中。不应在 ggplot()中设置组参数和/或特征参数。
身份限定符
标识限定符告知前面的几何或统计函数不做任何更改地解释特征参数的值。对于具有 alpha、线型、形状和大小特征的比例函数,具有标识限定符的比例函数有两个参数,…和 guide。对于具有颜色和填充特征的函数,函数有三个参数,…,guide 和 aesthetic。
参数…是函数 discrete_scale()或 continuous_scale()的参数。有关函数的参数列表,请参见这两个函数的帮助页面。这里不讨论这些参数。
自变量指南给出了秤使用的指南的名称(见第 10.1.4 节)。对于具有上述六个特征的比例函数,guide 的默认值为“无”。
参数美学给出了应用颜色、一种颜色(或多种颜色)或填充的美学类型。美学有四种可能的值:“颜色”、“填充”、c(“颜色”、“填充”)和 c(“填充”、“颜色”)。
如果在美学功能中设置了颜色和填充,则两者都可以在颜色、颜色或填充比例功能中设置。例如,geom_point( aes( shape=shape, fill=shape-19, color=shape-17 ) ) + scale_shape_identity() + scale_fill_identity( aesthetic=c( "color", "fill" ) )设置形状 21-24 的颜色和填充。这里,变量 shape 是一个整数向量,包含 21 到 24 之间的值,包括 21 和 24。
对于具有颜色(或色彩)特征的比例函数,美学参数采用默认值“色彩”。对于填充,美学采用默认值“填充”。
手册限定符
带有手动限定符的比例函数手动创建比例。具有 alpha、线型、形状和大小特征的比例函数以及手动限定符有三个参数。参数是…,用于函数 discrete_scale()的参数;values,表示组成标尺的值;和断点,用于音阶的断点或级别。
在带有手动限定符的函数的帮助页面上(函数共享该页面,并且此处的信息来自该页面),列出并描述了 discrete_scale()的参数。这里不讨论这些参数。
values 参数给出了与分组变量的每个级别或中断类相关联的特征值。参数采用特征采用的那种向量。向量的长度是分组变量中类的数量。值没有默认值。
形式上,values 参数的元素可以被命名,其中名称是显式的字符串。字符串必须包含与分组类相关联的字符串。(注意,在美学函数中,分组变量不能是数字。)例如,geom_line( aes( linetype=cut( dpi, 2 ) ) ) + scale_linetype_manual( values=c( "(85,2.05e+03]"="dotted", "(2.05e+03,4.01e+03]"="dashed" ) )将两个剪切类的名称分配给两种不同的线型。
breaks 参数提供了有关是否绘制图例的信息,以及如果打印图例,图例中包括哪些分组类的信息。该参数采用值 NULL、弃权()或包含与分组类相关联的所有字符串或字符串子集的字符向量。参数也可以采用创建字符向量的函数,但是分组类字符串和函数结果之间的匹配必须精确。
如果 breaks 设置为 NULL,则不绘制图例。如果 breaks 设置为等于弃权(),则绘制图例,并包括所有分组类别。如果 breaks 设置为等于分组类字符串的字符向量(或对创建字符向量的函数的调用),则图例中仅包含向量中存在字符串的分组类。休息的默认值是弃权()。
阿尔法特性
除了那些带有标识或手动限定词的函数之外,用于特征 alpha 的函数是没有限定词的函数,以及带有连续、装箱、离散和顺序限定词的函数。所有的函数,除了 scale_alpha_discrete(),都有两个参数,…和 range。离散函数有一个参数,…
根据前面 alpha scale 函数的帮助页,……参数将参数传递给 continuous_scale()、binned_scale()或 discrete_scale()函数,具体取决于运行的 scale 函数。有关参数的列表和说明,请参见这三个函数的帮助页。
range 参数采用长度为 2 的数字向量。元素的值必须介于 0 和 1 之间,包括 0 和 1,并给出用于绘制形状或线条的颜色的透明度范围。值 0 表示完全透明,值 1 表示完全不透明。对于使用 range 的四个函数,range 的默认值是c(0.1, 1)。
10.1.1.4 颜色、色彩和填充特征:简介
除了带有标识和手动限定词的比例函数之外,带有填充、颜色或特性颜色的比例函数是带有连续、色调、梯度、梯度 2、梯度 n、步骤、步骤 2、步骤 sn、酿造器、蒸馏器、发酵器、灰色、viridis_c、viridis_b 和 viridis_d 限定词的比例函数。色标有三种版本,非入库连续色标、入库连续色标和离散色标。默认情况下,未入库的连续刻度的图例有一个连续的颜色条。默认情况下,入库的连续刻度有一个带颜色步长的连续条。默认情况下,离散刻度有一个带有单独键的图例。
10.1.1.5 颜色、色彩和填充特性:连续限定词
对于 scale_colour_continuous()和 scale_fill_continuous(),这些函数处理数值(连续)数据。这些函数有两个参数,…和 type。argument …接受 continuous_scale()函数的参数。(有关更多信息,请参见 continuous_scale()的帮助页面。)
在 scale_colour_continuous()的帮助页面中,type 参数采用值“gradient”、“viridis”或任何返回连续色标名称的函数。类型的默认值是颜色特性的getOption("ggplot2.continuous.colour", default="gradient")和填充特性的getOption("ggplot2.continuous.fill", default="gradient")。
10.1.1.6 颜色、色彩和填充特性:色调限定符
scale_colour_hue()和 scale_fill_hue()函数创建离散的比例,而不是连续的比例,并使用因子或字符向量。这些函数接受八个参数:…,作为 discrete_scale()的参数;h,用于色调范围;c,对于色度等级;l,表示亮度水平;h.start,用于色调的起始值;方向,表示围绕色轮的方向;na.value,表示用于缺失值的颜色值;而审美,对于色彩的审美类型。(有关色调、色度和亮度的说明,请参见 3.4.1.3 一节中的 hsv()和 hcl()函数。)
h 参数采用两个元素的数值向量。第一个值是色调范围的最小值,第二个值是最大值。R 使用的值在 0 到 360 之间,包括 0 和 360;但是,为范围限制输入的值是缩减模数 360,即 15–375 的范围是从 15 回到 15 的循环。(请注意,色调比例是圆形的,而不是线性的,也就是说,该比例在 360°的范围内返回到起始颜色。)对于带有色调限定符的两个函数,h 的默认值都是c(0, 360) + 15。
c 参数接受一个一元非负数值向量。根据色调功能的帮助页面,可能的值取决于色调和亮度的值。这两个色调函数的默认值是 100。
l 参数采用一个单元素数值向量,其值介于 0 和 100 之间,包括 0 和 100。这两个色调函数的默认值是 65。
h.start 参数采用一个元素的数值向量。两个色调函数的默认值都是 0。
方向参数采用一个元素的数值向量。该值必须是 1 或-1。如果设置为 1,将围绕色轮逆时针方向选择色调。如果设置为-1,则方向为顺时针。两个色调函数的方向默认值都是 1。
na.value 参数采用单元素颜色值向量(参见第 3.4.1 节了解颜色值的种类)。对于两种色调功能,na.value 的默认值都是“灰色 50”。
美学论证的行为与颜色和填充的同一性标度函数中的行为相同(参见第 10.1.1.1 节)。颜色色调功能的默认值为“颜色”,填充色调功能的默认值为“填充”。
10.1.1.7 颜色、色彩和填充特征:渐变限定词
具有填充、颜色和颜色特征的比例函数以及渐变、渐变 2 和渐变 n 限定符用于连续变量。根据限定符是 gradient、gradient2 还是 gradientn,函数有七个、九个和八个参数。这九个函数共有五个参数。这五个参数是…,用于函数 continuous_scale()的参数;空间,为色彩空间;na.value(见第 10.1.1.5 节);指南,为指南的名称使用;和美学(见 10.1.1.1)。
space 参数只接受一个可能的值。值为“Lab”。根据九个函数的帮助页面,其他色彩空间已被否决。
guide 参数采用一个单元素字符向量。只有两个值是可能的,“colourbar”代表连续刻度,“legend”代表离散刻度。九个功能的默认值是“colourbar”。
带有渐变限定符的函数也接受低和高参数,用于刻度两端的颜色。参数采用长度为 1 的颜色值向量。低和高的默认值分别为"#132B43"和"#56B1F7",即刻度从深蓝色变为清晰的中蓝色。
带有 gradient2 限定符的函数将参数 low 和 high 与参数 mid 一起作为刻度中间的颜色。低、中和高的默认值分别为muted("red")、"white”和muted("blue”)。
三个 gradient2 函数也采用中点参数,表示标尺的中点,以创建标尺的变量的单位来度量。中点的默认值为 0。
带有 gradientn 限定符的函数也采用 colors(或等效的 colors)参数,用于标度中要使用的颜色,以及 values 参数,用于——根据函数的帮助页面——每种颜色从 0 到 1 的连续体的距离。
colors(或 colors)参数采用任意长度的颜色值向量(有关颜色值的信息,请参见第 3.4.1 节)。这些颜色用于生成连续的刻度。颜色没有默认值。
values 参数接受 NULL 值或与 colors(或 colors)长度相同的唯一值的数值向量。值必须介于 0 和 1 之间,包括 0 和 1。values 的默认值为 NULL。
10.1.1.8 颜色、色彩和填充特性:步骤限定符
具有颜色、色彩和填充特性以及 steps、steps2 和 stepsn 限定符的比例函数以分级的方式创建比例。这些函数适用于连续变量。
九个阶跃函数的自变量与九个梯度函数的相应自变量相同。参数也采用与九个渐变函数相同的默认值,只是在九个阶跃函数中,guide 的默认值是“coloursteps”。
10.1.1.9 颜色、色泽和填充特性:啤酒厂限定条件
具有颜色、色彩和填充特性的秤功能以及具有酿造器、蒸馏器和发酵罐限定符的秤功能共享一个帮助页面。具有 brewer 限定符的三个函数用于离散变量。具有蒸馏器和发酵器限定符的六个函数分别用于未入库的连续变量和入库的连续变量。
酿造器、蒸馏器和发酵器函数分别有五个、九个和七个参数。这九个函数共有五个参数。参数为…,分别用于 discrete_scale()、continuous_scale()和 binned_scale()函数。type,为刻度的样式;调色板,用于标尺的调色板;方向(见第 10.1.1.6 节);和美学(见第 10.1.1.1 节)。
类型参数接受一个长度为 1 的字符向量。在九个功能的帮助页面中,对于连续秤,类型值必须为“seq”之一;“div”,用于发散音阶;和“qual”,用于定性标度(有关三种类型的说明,请参见帮助页面)。在九个函数中,类型的默认值是“seq”。
palette 参数采用一个元素字符向量或一个元素数字向量。对于字符向量,字符串是用引号括起来的调色板名称。调色板名称的列表位于函数的帮助页面上,在名为“调色板”的部分下整数可用的调色板取决于 type 的值。
对于等于“seq”的类型集,有 18 个选项板可用,因此参数选项板可以取 1 到 18 之间的整数值。对于等于“div”的类型集,有九个调色板可用,因此参数调色板可以取 1 到 9 之间的整数值。对于等于“qual”的类型集,有八个调色板可用,因此调色板可以取从 1 到 8 的整数值。通过将 palette 参数设置为用引号括起来的调色板名称,可以访问任何调色板。这种选择不依赖于 type 的值。这九个函数的调色板默认值是 1。
对于不同的限定符,方向参数有不同的默认值。对于 brewer 限定符,方向默认设置为 1。对于蒸馏器和发酵器限定符,方向默认设置为-1。
对于带有 distiller 限定符的函数,前面文本中未涉及的四个参数是值、空格、na.value 和 guide——这些将在第 10.1.1.6 和 10.1.1.7 节中介绍。参数值、空间和 na.value 采用与渐变比例和色调比例函数中相同的默认值。参数指南采用值“colourbar”。
对于带有发酵罐限定词的函数,brewer 限定词中未涉及的两个参数是 na.value 和 guide–在第 10.1.1.6 和 10.1.1.7 节中涉及。na.value 的默认值与前面的值相同,guide 的默认值为“coloursteps”。
10.1.1.10 颜色、色彩和填充特性:灰色限定词
函数 scale_colour_grey()和 scale_fill_grey()处理离散数据(字符或因子数据),并创建灰度等级。这些函数有五个参数。参数是…,对于 discrete_scale()的参数;开始和结束,用于灰度的开始和结束值;na.value(见第 10.1.1.6 节);和美学(见第 10.1.1.1 节)。
开始和结束参数采用一个元素的数字向量。值必须介于 0 和 1 之间,包括 0 和 1。该值越小,灰色阴影越暗。“开始”和“结束”的默认值分别为 0.2 和 0.8。
na.value 参数采用两个灰色函数中的默认值“red”。美学变量的行为与第 10.1.1.1 节中的参数行为相同。
10.1.1.11 颜色、色彩和填充特性:绿色限定词
特征为 color、color 和 fill 的函数以及限定符 viridis_c、viridis_b 和 viridis_d 分别用于连续无仓秤、连续有仓秤和离散秤。九个功能中的每一个都有五个版本的色标,适用于许多看不到某些颜色(患有色盲)的人,因为色标与灰度色标一样有效,因为色标的功能与色标一样有效。
viridis_c 函数和 viridis_b 函数采用相同的 11 个参数。viridis_d 函数有七个参数,与 viridis_c 和 viridis_b 函数共享。
前七个参数是…,分别是 continuous_scale()、binned_scale()和 discrete_scale()函数的参数,具体取决于选择了哪个 viridis 函数;α,为透明度水平;begin,表示音阶的起始音级;end,表示标尺的结束级别;方向(见第 10.1.1.6 节);选项,用于配色方案;和美学(见第 10.1.1.1 节)。
alpha 参数采用长度为 1 的数字向量。该值必须介于 0 和 1 之间,包括 0 和 1。alpha 的默认值是 1。
begin 和 end 参数采用长度为 1 的数字向量。值必须介于 0 和 1 之间,包括 0 和 1。begin 和 end 的默认值分别为 0 和 1。
第 10.1.1.6 节描述了方向参数。九个 viridis 函数的默认值是 1。
选项参数采用长度为 1 的字符向量。字符向量可以是大写字母,也可以是名称。在维里迪斯函数的帮助页面中,可能的值为“A”或“岩浆”、“B”或“地狱”、“C”或“等离子体”、“D”或“维里迪斯”以及“E”或“文明”。对于九个 viridis 函数,选项的默认值为“D”。
具有 viridis_c 和 viridis_b 性质的函数的最后四个参数是值、空间、na.value 和 guide,这将在第 10.1.1.6 和 10.1.1.7 节中介绍。values、space 和 na.value 的默认值分别为 NULL、“Lab”和“grey50”。guide 的默认值是 viridis_c 函数的“colourbar”和 viridis_b 函数的“coloursteps”。
线型特征
除了带有标识和手动限定词的线型函数之外,线型比例函数还有 scale_linetype()、scale_linetype_continuous()、scale_linetype_binned()和 scale_linetype_discrete()。函数 scale_linetype_continuous()和 scale_linetype_binned()需要数字数据。函数 scale_linetype_discrete()需要离散数据。
根据尝试在 geom_line()、geom_path()、geom_curve()和 geom_segment()中将线型设置为连续对象时返回的错误消息,线型不能设置为等于美学函数中的数值数据。如果使用前面的比例函数运行 geom_line()和 geom_path(),这些函数将返回错误。
如果使用 scale_linetype()或 scale_linetype_continuous()运行 geom_segment()和 geom_curve(),则会出现错误。如果使用 scale_linetype_binned()运行,函数将运行,但无法设置线型。(若要设定线型,请使用 scale_linetype_identity()。)
函数 scale_linetype()和 scale_linetype_discrete()为离散数据提供了相同的结果。这些函数可用于设置离散(字符或因子)变量的图例格式。
函数 scale_linetype()、scale_linetype_binned()和 scale_linetype_discrete()采用相同的参数。参数有…,表示 discrete_scale()函数的参数,以及 na.value,表示为缺失值指定的值。对于这三个函数,na.value 的默认值为“空白”。
形状特征
具有形状特征的比例函数,除了具有限定符 identity 或 manual 的形状函数之外,还有 scale_shape()和 scale_shape_binned()。这些函数用于将形状(符号)分配给点。函数 scale_shape()处理离散数据。函数 scale_shape_binned()处理数字数据。
与 plot()相关联的函数有 25 种形状可用(可以分配给 pch 的整数)。在 ggplot2 函数中,有多种方法可以使用 25 个符号中的任何一个。(例如,geom_point( aes( shape=( 1:25 )[ cut( dpi, 25 ) ] ) ) + scale_shape_identity()可用于绘制生命周期保存数据集中 50 个点的 25 级 dpi。单个字母也可以用同样的方式。)但是,默认情况下,ggplot2 函数仅使用六个形状,前三个形状有两个版本——实心和轮廓。这些形状是圆形、正方形、三角形、十字形、内部带有对角线十字形的正方形和星号。
两个函数都采用相同的两个参数。参数有…,用于函数 discrete_scale()的参数,以及 solid,用于将圆、三角形和正方形绘制为纯色还是轮廓。
实参 solid 取一个长度为 1 的逻辑向量。如果设置为 TRUE,则绘制实心符号。如果设置为 FALSE,则绘制形状轮廓。solid 的默认值为 TRUE。
尺寸和半径特征
大小和半径特征的比例会影响点和线的大小。有五个具有大小或半径特征的比例函数:scale_radius()、scale_size_area()、scale_size()、scale_size_binned_area()和 scale_size_binned()。具有半径特征的比例函数线性地调整大小。缩放功能具有按面积缩放的尺寸特征(与半径的平方成比例)。这五个函数处理数值数据(连续数据)。
scale_size_area()和 scale_size()之间的区别在于 scale_size_area()的缩放比例使得 0 的值缩放到零。scale_size()函数不起作用。带有面元限定符的函数在绘制点或线之前为数据创建面元。(以上信息来自五个函数的帮助页面,这些函数共享这五个功能。)
scale_radius()和 scale_size()函数有相同的七个参数,具有相同的默认值。scale_size_binned()函数还有两个参数,并有一个不同的默认值。scale_size_area()和 scale_size_binned_area()函数有两个参数,这两个函数中的参数都相同,包括第二个参数的相同默认值。
前三个函数的七个参数是 name,如果有图例,则是图例的标题;课间休息,用于图例中的类级别;标签,用于图例中的类级别标签;极限,图例的下限和上限;范围,用于绘图和图例中的点或线尺寸范围;trans,表示要应用于数据的转换;和指南,用于图例中的刻度样式。
name 参数接受一个值 NULL、一个任意长度的字符向量和一个返回有效对象的函数。如果名称设置为空,则不打印标题。如果是字符向量,只使用第一个元素。如果 size 是第一个或唯一的美学设置,那么前面三个 scale 函数中 name 的缺省值是弃权()函数,即参数 size 的设置值。
breaks 参数采用 NULL、任意长度的数字向量、弃权()函数和采用极限(见下文)并返回断点的函数之一。如果该值为空,则不绘制图例。如果该值是一个数字向量,则这些数字是相对于美学函数中 size 设置的值而言的。如果某些分隔点超出数据范围,则不会绘制与分隔点相关联的关键字或框线–除非设置了 limits 参数(参见下文),并且分隔点在该参数设置的限制范围内。在前三个比例函数中,中断的缺省值是弃权(),也就是说,R 根据参数 trans 的值选择中断(参见下文)。
labels 参数采用 NULL、弃权()函数、与 breaks 长度相同的字符向量以及采用 breaks 值并返回 labels 字符向量的函数之一。对于前三个尺度函数,labels 的缺省值是弃权(),即 R 根据 trans 的值计算好的标签。
limits 参数采用 NULL、两个元素的数值向量和访问默认限制并使用默认限制创建新限制的函数之一。如果设置为 NULL,则使用默认限制。如果设置为数字向量,这两个值将给出刻度的下限和上限。根据帮助页面,可将 NA 值分配给限值,以使用限值的当前值。对于前面三个比例函数,限值的默认值为空。
range 参数采用两个元素的数值向量。这些数字给出了被缩放的点或线的最小和最大尺寸。对于前面三个函数,range 的默认值是c(1, 6)。
trans 参数接受一个单元素字符向量或一个值的转换对象。根据 size 和 area 函数的帮助页,transformation 对象是一种使用变换(如取幂)和变换的逆变换来创建断点和标签向量的函数。
如果 trans 参数是字符向量,则字符向量必须包含转换的名称,如“log10”或“exp”。转换必须存在转换对象。(有关存在转换对象的转换名称以及转换对象名称的列表,请参见 size 和 radius 函数的帮助页。转换对象也可以在 scales 包中找到。)
可以使用 scales 包中的函数 trans_new()创建一个新的转换对象。转换对象的名称具有格式 transformation _trans,其中 transformation 是转换的名称,trans 是扩展。
对于前面三个比例函数,trans 的默认值为“相同”。标识转换不对数据进行任何转换。
guide 参数接受一个单元素字符向量或 guide 函数的输出(请参见下文)。scale_radius()和 scale_size()的 guide 默认值为“legend”。
scale_size_binned()函数采用另外两个参数:n.breaks,表示 bin 断点的数量 nice.breaks,表示是否创建好看的断点(例如,1000 而不是 1002.06)。除非 nice.breaks 参数设置为 FALSE,否则并不总是遵循 n.breaks 参数。
n.breaks 参数接受 NULL 值或一个元素的数值向量。n.breaks 的默认值为 NULL,也就是说,转换对象决定了断点的数量。
nice.breaks 参数采用一个元素逻辑向量。如果设置为 TRUE,会找到好看的断点。如果设置为 FALSE,则通过更简单的方法设置断点,而不考虑断点的外观。nice.breaks 的默认值为 TRUE。
scale_size_binned()函数具有不同的 guide 默认值。向导的默认值是“箱”。
对于 scale_size_area()和 scale_size_binned_area()函数,参数为…,表示 continuous_scale()函数的参数,参数为 max.size,表示点或线的最大大小。两种缩放功能的最大尺寸默认值均为 6。
设定评估顺序
可以在几何函数中使用 after_stat()、after_scale()和 stage()函数来设置美学参数的求值顺序。当使用前述函数之一时,美学自变量被设置为等于几何函数的美学函数内的前述函数。
大多数几何函数利用统计函数。通过使用 after_stat(),统计函数创建的变量可用于计算美学参数的值。
after_scale()函数可用于根据已经设置的美学参数计算美学参数的新值。美学上的争论可以用在等式的两边。
stage()函数允许以多种方式缩放美学,既可以在统计函数完成之后,也可以在初始缩放完成之后。
根据这三个函数的帮助页面,如果使用 after_stat(),则只有那些由统计函数创建的参数或在调用 ggplot()的环境中的参数才能用于创建美学参数的值。数据框中的变量不可用。after_scale()函数只能使用应用初始美学创建的变量或父环境中的变量。对于 stage(),数据框中的变量只能在函数的第一个参数中使用。
after_stat()和 after_scale()函数都接受一个参数 x,用于为美学创建值的公式。这两种功能都可以应用多次。清单 10-1 中给出了两次使用 after_scale()的例子。
ggplot(
data.frame(
LifeCycleSavings[ ord, ][ 1:49, ],
LifeCycleSavings[ ord, ][ 2:50, ]
),
aes(
pop75,
pop15,
xend=pop75.1,
yend=pop15.1
)
) +
geom_segment(
aes(
group=cut(
dpi.1,
6
),
color=after_scale(
grey(
( group+1 )/9
)
),
size=after_scale(
group-0.5
)
)
)
Listing 10-1Code showing an example of using after_scale() twice in one geometry function. Since two aesthetics are used for the variable, a warning is given when the code is run
请注意,线段的颜色和大小都基于 group 的值。提出警告,这两种美学是建立在同等尺度上的。
stage()函数有三个参数。参数为开始,用于 ggplot()或几何数据框中变量的函数,统计函数或缩放函数通过其进行操作;after_stat,用于由统计函数创建的变量的函数;和 after_scale,用于美学变量的函数。三个参数的默认值为 NULL。在清单 10-2 中,给出了一个使用 stage()的例子。
ggplot(
LifeCycleSavings,
aes(
pop75
)
) +
geom_histogram(
aes(
color=cut(
dpi,
10
),
fill=stage(
cut(
dpi,
10
),
after_scale=alpha(
fill,
0.6
)
)
),
bins=10
)
Listing 10-2An example of using stage() to set fill colors in a histogram is given
请注意,舞台被分配的美感是填充,并且填充颜色通过在填充上使用 alpha()函数而变亮。美学参数颜色设置为完全相同的颜色。(该示例基于三个函数的帮助页面上的示例。)
10.1.3 用刻度和坐标功能格式化轴,加上一些
特征为 x 或 y 的比例函数和坐标函数都在图的轴上运行。根据函数的帮助页面,比例函数在几何函数使用的统计函数运行之前运行。坐标功能在统计功能运行后运行。对于散点图,除了刻度线不同之外,两者给出的结果相同。
x 和 y 刻度函数具有连续、分仓、离散、反向、log10、sqrt、日期、时间和日期时间限定符。坐标函数以 coord_ 开头,具有笛卡尔坐标、固定坐标、翻转坐标、地图坐标、快速地图坐标、蒙克坐标、极坐标、sf 坐标和平移坐标特征。
秤的功能
带有连续限定词的 scale 函数给出了连续的 x 或 y 美学的常用比例(数字和未入库)。装箱限定符为连续的 x 或 y 美学创建箱,并在箱的中心绘制点。带有连续和分段限定词的比例函数仅在 x 和 y 美学连续的情况下运行。带有离散限定词的缩放功能可在连续和离散的 x 和 y 美学上运行,但不提供连续美学的轴刻度或轴刻度标签。
带有 reverse 限定符的 scale 函数反转轴的顺序。带有 log10 限定符的 scale 函数将轴的比例转换为基数为 10 的对数比例,并相应地更改绘制的几何图形。对于 log10 限定符,x 或 y 的所有值都必须是正数。带有 sqrt 限定符的 scale 函数将轴转换为 x 或 y 中值的平方根,并相应地更改绘制的值。x 或 y 的所有值都必须是非负的。
带有日期限定符的 scale 函数创建一个带有日期值的刻度。对于日期刻度函数,x 或 y 美学参数必须属于 Date 类。带有 datetime 限定符的 scale 函数创建一个带有日期和时间值的小数位数。美学参数 x 或 y 必须属于 POSIXct 类。
带有时间限定符的 scale 函数创建一个带有时间值的刻度。x 或 y 美学必须是数字,并转换为 hms 类的格式(即 hh:mm:ss,其中 hh 是小时,mm 是 00 到 59 之间的分钟,ss 是 00 到 59 之间的秒)。hms()函数可用于将数字数据格式化为 hms 类。如果没有进行格式化,数字数据将被解释为秒。小时数没有上限。这些值可以是负数。
坐标功能
坐标函数都影响两个轴,除了函数 coord_trans()也只能影响一个轴。这些函数转换轴的坐标。
函数的作用是:创建笛卡尔(线性)坐标。函数 coord_fixed()给出一个图,其中 x 轴上的单位与 y 轴上的单位成固定比例,与图形设备的大小无关。比率由比率参数给出,默认设置为 1。
函数的作用是:翻转坐标轴。函数的作用是:创建经度和纬度的坐标。地图特征函数的六个参数中的三个是投影,用于地图投影的类型;xlim,用于纵向极限;和 ylim,纬度界限,假设通常的方向。
函数使用极坐标。该函数的四个参数中有三个是θ,即 x 或 y 中的哪一个用作角度;start,以弧度表示起始角度,在绘图顶部为 0;和方向,表示围绕绘图的方向-值 1 表示顺时针方向,值-1 表示逆时针方向。
极坐标转换绘制了赋给 theta 的变量的相对大小(360 度),并忽略了值的绝对大小(标签中的数字除外)。另一个变量给出了θ中每个值的半径。
函数的作用是:为简单的特征数据创建坐标。简单要素是空间数据。
根据 coord_munch()的帮助页面,该函数用于几何函数中。该函数将轴上的坐标分成小块,以便更清晰地绘制矢量。
coord_trans()函数通过一个函数提供一个或两个轴的手动变换。参数 x 和/或 y 被设置为等于引号中的函数名或转换对象。转换可以由用户生成。有关转换名称和转换对象的更多信息,请参见第 10.1.1.14 节。
其他轴功能
还有一些其他功能会影响轴。xlab()和 ylab()函数可用于手动设置轴标签。lims()、xlim()和 ylim()函数可用于设置美学变量或轴的限制。expansion()和 expand_scale()函数用作 scale 函数中 expand 参数的值。这些函数计算在轴和图之间放置给定大小的区域所需的轴限制。
dup_axis()和 sec_axis()函数用作 x 和 y 刻度函数中 sec.axis 参数的值。这些函数格式化与原始轴相对的第二个轴。函数的作用是:复制原始轴。sec_axis()函数基于原始轴的刻度的一对一转换创建一个新轴。
xlab()和 ylab()函数有一个参数 label,用于包含标签的字符串。(也可以通过设置参数名称在比例函数中分配标签。)
lims()函数采用命名的二元向量,其中的名称具有美学意义(例如,x=c(5,20))。向量可以是数字、字符、因子、日期、POSIXct 或 hms 类,这取决于美学参数的类。在对 lims()的调用中,向量用逗号分隔。
函数 xlim()和 ylim()接受两个单一的数值,给出 x 或 y 轴的下限和上限。这些功能适用于数字(连续)轴。
expansion()和 expand_scale()函数具有相同的参数。参数有 add 和 mult,前者表示要在扩展区域的轴上加减的值,后者表示乘法扩展因子。
dup_axis()和 sep_axis()函数有相同的五个参数。这些参数是 trans(参见第 10.1.1.14 节)、name、breaks、labels 和 guide。(有关四个参数的说明,请参见 continuous_scale()、binned_scale()或 discrete_scale()的帮助页面——帮助页面的功能取决于秤的类型。)在 sec_axis()和~中 trans 的默认值为 NULL。在 dup_axis()中。名称、中断、标签和参考线的默认值是 sec_axis()中的弃权()和 dup_axis()中的派生()。
10.1.4 引导和绘制键功能
引导功能用于格式化轴的属性或缩放变量的键(例如,图例或颜色条)。大多数导向功能都在比例功能中使用。(引导参数出现在 continuous_scale()、binned_scale()和 discrete_scale()的参数列表中。)绘制键函数给出图例中使用的键的样式。
指南的功能
ggplot2 包中支持九个引导函数,不支持五个引导函数,但它们是存在的。在这九个函数中,有一个函数 guide_axis()为轴提供结构化。两个是彩色/彩色复制品。四个结构缩放变量的关键。这四个是 guide_legend()、guide_colorbar()、guide_colorsteps()和 guide_bins()。一个函数 guide_none()不给出图例或轴刻度线和刻度线标签。guides()函数在一个对象中组合了多个参考线。
在比例函数中,通过将自变量引导设置为引号中的名称或完整函数(如guide=“bins”或guide=guide_bins())来设置函数。有关函数的参数列表,请参见向导函数的帮助页面。
影响轴的参考线
guide_axis()函数有六个参数。这些参数设置轴标签、轴刻度标签重叠时如何处理、标签的角度、轴并排的位置以及绘制轴的顺序。
guide_none()可用于 x 和 y 缩放功能。该函数用于分配不带刻度线或刻度线标签的轴标签。轴标签被分配给 title 参数。标签的位置可以用 position 参数指定,方法是将该参数设置为" bottom "、" left "、" top "或" right "。
影响缩放变量关键点的指南
guide_none()函数在与非轴缩放函数的缩放函数一起使用时,可用于抑制缩放变量的键。guide_legend()函数为缩放变量(通常是美学参数的函数)设置一个图例。guide_bins()函数设置了一个由不同步骤组成的条带,在这些步骤的交叉处显示不同的级别。这些步骤是块中的关键点。函数 guide_colorsteps()是 guide_bins()的一个版本,它的键是用标尺颜色填充的矩形。这三个函数可用于未入库的连续(数字)数据、入库的连续(数字)数据和离散(字符或因子)数据。
guide_colorbar()函数只能用于连续数据(未入库或已入库)。对于未入库的连续数据,该函数绘制连续的分级色标。标度标有标度变量的递增或递减级别。对于分级秤,guide_colorbar()的行为类似于 guide_colorsteps()。
guides()函数用于轻松地为绘图分配一组参考线。指南没有指定的参数。相反,每个参考线都被分配给应用该参考线的美学论点,并且每个参考线都用逗号与其他参考线隔开。可以为结果指定一个名称。然后,可以在添加到 ggplot()的函数中使用该名称。该名称被添加到几何或统计函数中,不包括括号。不需要缩放功能。在清单 10-3 中,给出了一个使用指南()的例子。
gd=guides(
size=guide_legend(
title="dpi"
),
color=guide_legend(
title=NULL
)
)
ggplot(
LifeCycleSavings,
aes( pop75, pop15 )
) +
geom_point(
aes(
size=as.numeric(
as.factor(
cut( dpi, 5 )
)
),
color=after_scale(
grey( (size+1)/12 )
)
)
) + gd
Listing 10-3An example of code for setting up a set of guides using the function guides()
在清单中,引导首先被分配给一个名为 gd 的对象。设置绘图后,通过在几何函数后包含名称 gd 来运行引导。请注意,标尺函数中没有设置参考线。
绘制键功能
有 16 个绘图键功能。这些函数的名称以 draw_key_ 开头,后面是一个几何图形的名称。可用的几何名称包括点、直线、矩形、多边形、空白、箱线图、纵横图、路径、vpath、点图、点范围、平滑、文本、标签、vline 和时间序列。(请注意,vpath 不是列出的几何图形,而是包含在 draw_key 帮助页面的列表中,此处的信息来自该页面。)
几何和统计功能会自动指定键样式,但默认键样式可以更改。draw key 函数被分配给 geometry 和 statistic 函数中的 key_glyph 参数。(key_glyph 参数在 layer()函数中。几何和统计函数都调用 layer()函数。)
赋值的形式要么是带引号的几何图形名称,要么是不带括号且不带引号的总函数名称(如key_glyph="abline"或key_glyph=draw_key_abline)。
10.2 剪切、汇总和分面的功能
切割函数离散化连续(数字)向量。facet 函数绘制几个图,其中每个图包含与分组变量的值相关联的数据。汇总函数给出数字向量的汇总,可以按组完成。大多数汇总函数可以绘制在分组(或未分组)数据上。
ggplot2 包中有三个切割函数、三个刻面函数和五个汇总函数。(摘要函数基于 Hmisc 包中的函数和 Hmisc 包的依赖项。)还有一个名为 resolution()的函数,它给出了一个数值向量的分辨率(不同数字之间的最小差值)。
切割功能
ggplot2 包中的三个切割函数是 cut_interval()、cut_number()和 cut_width()。这些函数基于基本函数中的 cut()函数,可以使用 cut()的参数以及帮助页面上列出的三个函数的参数。这三个函数的第一个参数是 x,用于将数值向量切割成离散因子级别。
cut_interval()函数根据 n(等长间隔的数量)或 length(等长间隔的长度)将数据范围分割成多个间隔。如果选择了 n 参数,则间隔的宽度是数值向量的范围除以 n。
如果选择了 length 参数,则参数长度不一定平均划分到数据向量的范围内。该函数确定间隔的起始值。n 和 length 都采用一个元素的数值向量。
cut_number()函数有一个参数 n,表示间隔的数量。该函数的行为类似于选择 n 的 cut_interval()。
函数提供了更多的灵活性。除 x 之外的指定参数是 width,表示间隔的宽度;中心,为第一个音程的中心;边界,用于第一个间隔的开始;和 closed,用于是关闭左边的还是右边的区间(关闭边界意味着区间的关闭边界上的数据点被包括在区间中)。
宽度、中心和边界参数采用单元素数值向量。宽度没有默认值。中心和边界的默认值为空。
封闭参数采用单元素字符向量,值必须是“left”或“right”。默认值为“右侧”,即间隔在右侧关闭。
10.2.2 汇总函数和 resolution()函数
ggplot2 包中的汇总函数与 stat 汇总函数一起使用,即以 stat_summary 开头的函数。stat 汇总函数采用 fun 参数,汇总函数可以分配给该参数。四个汇总函数基于 Hmisc 包中的函数,必须安装 Hmisc 包才能运行这些函数,但不需要加载。这些函数是 mean_cl_boot()、mean_cl_normal()、median_hilow()和 mean_sdl()。第五个函数是 mean_se()。在本节的最后,将介绍函数 resolution()。
汇总函数都有两个参数:x,表示要汇总的数值向量,以及…,表示 Hmisc 包中函数的参数,这些函数的名称前面都有字母 s,这些函数都返回长度为 3 的数据帧。data.frame 元素的名称是 y、ymin 和 ymax。
mean_cl_boot()和 mean_cl_normal()函数分别基于引导数据或正态分布(使用 t 分布的分位数)给出数据的平均值和平均值的置信区间。median_hilow()函数根据置信度给出数据的中值以及数据的上下经验分位数。对于这三个函数,置信区间的级别由参数 conf.int 设置,默认情况下取值为 0.95。
mean_sdl()和 mean_se()函数返回数值向量的平均值,该平均值减去一个常数乘数乘以向量的标准偏差或平均值的标准误差,再加上一个常数乘数乘以向量的标准偏差或平均值的标准误差。对于 mean_sdl(),使用向量的标准偏差。对于 mean_se(),使用平均值的标准误差。在这两个函数中,乘数都是用 mult 参数设置的。默认情况下,mean_sdl()的 mult 值为 2,mean_se()的 mult 值为 1。
在清单 10-4 中,给出了图 10-1 中示例的代码。代码和图形显示了函数 mean_cl_boot()的使用及其默认值。
图 10-1
使用 mean_cl_boot()与 stat_summary()和 scale_x_binned()在条柱内的散点图上绘制汇总统计数据的示例
ggplot(
LifeCycleSavings,
aes(
pop75,
pop15
)
) +
geom_point(
) +
labs(
title="Example of Using mean_cl_boot() with stat_summary()"
) +
scale_x_binned(
) +
stat_summary(
fun.data = "mean_cl_boot",
colour = "grey60",
size = 0.5
)
Listing 10-4The code for the example in Figure 10-1 of using mean_cl_boot() in stat_summary()
在图 10-1 中,运行清单 10-4 中的代码。摘要统计数据以中灰色显示。
请注意,scale_x_binned()用于绑定 pop75 值。平均值和置信区间是每个箱内的 pop15 值。平均值和置信区间为中灰色。绘制的数据点是黑色的。
resolution()函数计算一个数字向量的分辨率。分辨率是向量中相邻值之间的最小差值。如果两个相邻值相同,则分辨率设置为 1。函数 resolution()有两个参数:x 表示数值向量,零表示是否在向量中自动包含值 0。
x 参数接受任意长度的数值向量。零参数采用一个元素逻辑向量。如果设置为 TRUE,向量将被加上 0。如果设置为 FALSE,则不添加 0。默认值零为真。
刻面功能
分面函数基于将一个或多个分组变量应用于数据框中的矢量来创建多个图。图中使用的数据来自给定的数据向量,但没有图与另一个图共享数据,向量中的所有数据都被绘制。有三个 facet 函数,facet_null()、facet_wrap()和 facet_grid()。
还有一些函数用于为 facet_wrap()和 facet_grid()函数中的参数创建值。vars()函数引用分组变量,其行为类似于 aes()函数。该函数与 facet_wrap()中的参数 facets 以及 facet_grid()中的参数 row 和 col 一起使用。还有一些函数与参数标注器一起使用(参见下文)。
facet_null()函数是用于绘制单个面板的函数。该函数是在未调用 facet_wrap()和 facet_grid()时默认调用的函数。该函数使用一个参数 shrink 来表示是否将图缩小到统计函数(如果调用了统计函数)或与几何函数关联的统计函数(如果调用了几何函数)的输出尺寸。shrink 的默认值为 TRUE,即进行收缩。
facet_wrap()函数获取一个绘图向量(小平面),默认情况下,从左到右绘制它们。当函数确定新行是合适的时,开始新行。第一个参数是 facets,这是一个或多个变量,用于对数据进行分面。参数值的形式可以是 vars( var1)、" var1 "、~ var1、vars( var1、var2、var3)、var2 ~ var1、~ var1 + var2、c( "var1 ",var2)和 var3 ~ var1 + var2,其中 var1、var2 和 var3 是分面变量的名称,是数据框中的变量,或者是基于数据框中变量的表达式。如果使用了函数 labeller(),那么应该为表达式变量指定一个名称。
可以指定行数和/或列数,但必须有足够的空间来容纳小平面图的总数。否则,会发生错误。绘图方向可以从左到右改为从上到下。小平面图标签的位置可以从每个图的顶部更改到每个图的任何其他侧边。
函数的作用是:创建一个矩阵图。前两个参数是 rows 和 cols,用于放置在行和列中的变量。可以指定其中之一或两者。参数行可以采用与 facet_wrap()中的参数方面相同类型的值。参数 cols 必须设置为 NULL 或变量名和/或表达式,用 vars()函数括号括起来,并用逗号分隔。
行的值的级别沿着列向下,列的值的级别穿过行。默认情况下,行的方面标签位于右侧,列的方面标签位于顶部。
可以选择绘图是否应该是相同的大小,是否将行和/或列刻面标签切换到底部和/或左侧,以及是否绘制边界绘图。可以绘制行边距、列边距或两者都有。
函数 facet_wrap()和 facet_grid()共享五个参数。第一个参数告诉函数这些图的比例是否应该相同,如果不相同,应该允许什么变化。默认情况下,打印比例相同。第二个是 shrink,包含在 facet_null()下。
第四个告诉函数是将行从顶部开始,列从左侧开始,还是将行从底部开始,列从左侧开始。默认情况下,行从顶部开始。
第五个告诉函数是否删除没有数据的行和列组合。默认情况下,没有数据的组合会被删除。
facet_wrap()中的参数开关已被软否决,不应使用。facet_grid()中的参数 facets 已被否决,不应使用。
第三个参数 labeller 接受 labeller 类的一个函数。labeller 接受的值可以是 labeller 类的函数名(不带引号,也没有括号),对函数 as.labeller()的调用,或者对函数 labeller()的调用。在 labeller()中,分面变量的名字被赋予 labeller 类的一个函数或对 as.labeller()的一个调用。函数 labeller()用于将不同的标注函数分配给不同的分面变量。
有六个预设的标签功能(以 label_ 开头)用于格式化和设置面板标签。标注函数的扩展是 value,用于将变量的值用于标注;both,使用变量名和变量值作为标签;上下文,用于在有一个分面变量时使用值,以及在有多个分面变量时使用变量名和值;解析,用于使用 plotmath()生成的名称作为标签;bquote(),用于将 plotmath()生成的名称分配给行和列的标签;和 wrap_gen,用于使用 strwrap()函数包装标签文本。
函数 as_labeller()用于创建新的标注函数。要分配不同于默认标签的方面标签,必须使用 as_labeller()。如果有多个要改变标签的刻面变量,则创建多个标签函数(见清单 10-5 )。
使用 as_labeller()时,格式必须正确。第一个参数 x 可以是具有正确形式的函数,或者是转换为名称并设置为等于包含新方面标签的字符串的因子变量值的向量。例如,如果名为 process 的因子变量的值是“fn”和“1rw ”,并且“fn”和“1rw”的标签应该是“Finished”和“Raw 1 ”,那么作为 x 值输入 as_labeller()的表达式c( fn="Finished", 1rw="Raw 1")将创建 labeller 类的一个函数,该函数将给出所需的结果。as.labeller()创建的 labeller 函数被输入 labeller()。注意,由于“1rw”以数字开头,所以 1rw 在 R 中不能是合法名称;但是,“1rw”是一个合法名称。反勾号使名称合法。
在清单 10-5 中,给出了一个使用 facet_wrap()、vars()、as_labeller()和 labeller()的例子。代码运行在图 10-2 中。
图 10-2
将 facet_wrap()与 vars()、as_labeller()和 labeller()一起使用的示例
ggplot(
LifeCycleSavings,
aes(
dpi
)
) +
labs(
title="Example of Using
facet_wrap(), vars(), labeller() and as_labeller()"
) +
geom_histogram(
bins=7
) +
facet_wrap(
facets=vars(
cpop15=cut_number(
pop15,
n=2
),
cpop75=cut_number(
pop75,
n=2
)
),
labeller=labeller(
cpop15= as_labeller(
x=c(
`[21.4,32.6]`="% < age 15: 21.4% to 32.6%",
`(32.6,47.6]`="% < age 15: 32.6% to 47.6%"
)
),
cpop75= as_labeller(
x=c(
`[0.56,2.17]`="% > age 75: 0.56% to 2.17%",
`(2.17,4.7]`="% > age 75: 2.17% to 4.70%"
)
)
)
)
Listing 10-5Code for the example in Figure 10-2 of using facet_wrap(), vars(), as_labeller(), and labeller()
在图 10-2 中,运行清单 10-5 中的代码。
请注意,标签是按照分面变量在参数分面中出现的顺序排列的。此外,当图从左向右进行时,第一个分面变量的第一个值保持不变,而第二个分面变量的值增加。并且该函数在第二个图之后创建一个换行符,这创建了一个好看的图形。有关参数列表和更多示例,请参见 labeller()和 as.labeller()的帮助页。
10.3 使用图、自动图和原型
在本节中,将介绍保存、绘图和打印绘图的功能。创建根据打印对象的类别自动创建打印的函数的函数已被忽略。最后,描述创建原型的函数。
在第 10.3.1 小节中,涵盖了函数 ggsave()、ggplot 对象的 plot()和 ggplot 对象的 print()。在 10.3.2 小节中,介绍了 auto_plot()和 auto_layer()函数。在第 10.3.3 小节中,给出了用于创建原型的功能。
10 . 3 . 1 gg save()函数以及 plot()和 print()函数适用于 ggplot 对象
函数 ggsave()是一个将绘图保存到 r 之外的文件的函数。创建的图形文件的种类可以通过给定文件的扩展名或通过指定设备的种类来设置。当在函数中调用 ggplot()时,函数 plot()和 print()在应用于 ggplot 对象时非常有用。这两个函数对 ggplot 类的对象进行操作,创建一个绘图。
ggsave()的第一个参数是 filename,表示要分配给绘图的文件名(用引号括起来)。文件名不包括保存文件的路径,该路径由参数 path(也用引号括起来)指定,默认情况下是工作区。
ggsave()的第二个参数是 plot,用于保存绘图。默认情况下,参数图保存图形设备上的图。否则,可以将 plot 指定给包含由 ggplot()函数或绘图代码生成的绘图的对象的名称。
第三个参数是 device,表示要使用的图形格式。参数可以是带引号的文件扩展名,也可以是生成给定扩展名图的函数名,带左括号和右括号(关于图形设备和图形格式的讨论,请参见第 6.1 节)。在 ggsave()的帮助页面中,可用扩展名列表为“eps”、“ps”、“tex”、“pdf”、“jpeg”、“tiff”、“png”、“bmp”、“svg”,在 MS Windows 设备上为“wmf”。
第四个参数是 path,在前面的第一个参数中有描述。还有七个参数,包括最后一个参数,…,用于图形设备函数的参数。这些参数给出了比例因子以及绘图的宽度、高度、单位和分辨率。默认情况下,缩放因子为 1,宽度和高度由图形设备的大小给出,分辨率为每英寸 300 点。
第十个参数是 limitsize,用于是否将大小限制为 50 英寸乘 50 英寸。根据帮助页面,该参数防止了使用像素大小而不是英寸、厘米或毫米的常见错误。limitsize 的默认值为 TRUE。
当在函数中运行 ggplot()时,使用函数 plot()和 print()(例如,通过在数据集上循环来创建多个图)。如果使用通常的美学函数,这些函数会产生错误。有关调用 ggplot()的函数内部使用的美学函数,请参见第 8.2 节的介绍。
如果使用了正确的美学函数,并且运行了 ggplot()函数,但不是在 plot()或 print()函数中,则这些函数会运行,但不会出图。plot()或 print()函数从外部生成图。
10 . 3 . 2 auto plot()和 autolayer()函数
autoplot()和 autolayer()函数用于创建一类对象的基本格式。我认为,一旦为一个工作空间内的一类对象设置了 autoplot()(或 autolayer()),那么在 ggplot()(或 layer())中调用该类对象时,autoplot()(或 autolayer())中的格式就是起始格式。所以慎用。
在清单 10-6 中,给出了一个为 ggplot 类的对象设置 autoplot()的例子。这种分配是没有意义的,因为 ggplot 类的一个对象只需在 R 提示符下输入就可以绘图,但是清单演示了如何为一个类设置 autoplot()。
> test.plot = ggplot( LifeCycleSavings, aes( pop75, pop15 ) ) + geom_point() + geom_line()
> class( test.plot )
[1] "gg" "ggplot"
> autoplot.ggplot = function(x) x
> autoplot( test.plot )
Listing 10-6An example of setting autoplot() to plot objects of the ggplot class
注意,对象 test.plot 的一个类是 ggplot。此外,函数 autoplot()会自动确定 ggplot 类的对象是否存在方法,因此在调用 autoplot()时不会使用 ggplot 扩展。
10 . 3 . 3 gg plot 2 包中的原型函数
ggplot2 包有许多用于创建和使用 ggplot2 原型函数的函数。ggplot2 包中有五个与原型相关联的函数,ggproto(),用于创建原型函数;ggproto_parent(),用于访问原型函数的父函数;is.ggproto(),用于测试函数是否为原型函数;以及 format()和 print(),用于 prototype 函数使用的 format()和 print()方法。
根据 ggproto()的帮助页面,该函数实现了一种面向对象风格的 R 编程方法。该方法提供的函数比 R 中的其他方法运行得更快,并且可以跨包工作。
函数 ggproto()有三个参数,_class,作为原型函数创建的对象的类名;_inherit,用于原型函数从其继承的 ggproto 类的对象;和…,用于组成原型的命名值。这些值可以是任何 R 对象,包括原子类型和函数的对象。
_class '和 _inherit '参数可以设置为 NULL,并且默认情况下设置为 NULL。参数包含组成原型函数的对象——通常是变量和函数定义。对象由逗号分隔。
通过使用函数定义的参数列表中的参数 self,函数定义可以引用原型函数。然后可以用符号 self$ variable_name 引用原型函数中的对象,其中 variable_name 是原型函数中对象的名称。
原型函数中设置的变量可以在每次调用原型函数时更新,方法是将变量 self$variable _ name(变量名称是要设置的变量的名称)设置为表达式。表达式可以包含 self$variable _ name;self$variable_name_other,其中 variable_name_other 是原型函数中另一个变量集的名称;和函数定义的参数列表中的参数。
函数 ggproto_parent()有两个参数,parent 用于父原型函数的名称,self 用于引用正在定义的原型函数。两者都没有默认值。
根据 ggproto()的帮助页面,在父原型函数中定义的函数用表达式 gg proto _ parent(parent_prototype_function_name,self)defined_function_name`后的括号内。
函数 is.ggproto()为要测试的对象接受一个参数 x。如果对象属于 ggproto 类,则返回 TRUE。否则,返回 FALSE。x 没有默认值。
ggproto()的帮助页与 ggproto_parent()和 is.ggproto()共享,包含使用 ggproto()和 ggproto_parent()的简单示例。register_theme_elements()的帮助页面包含一个使用 ggproto()的实际例子。