R4-数据可视化教程-全-

R4 数据可视化教程(全)

原文:Visualizing Data in R 4

协议:CC BY-NC-SA 4.0

一、plot()qplot()ggplot(),以及其它

r 提供了许多可视化数据的方法。R 语言中的图形是由函数生成的。有些功能几乎可以立即创建有用的可视化效果。其他功能组合在一起创建高度编码的复杂图像。这本书向您展示了如何生成这两种类型的对象。

在本书的第一部分,我们将详细介绍 plot()函数——这是最基本也是最通用的绘图函数。还描述了函数 par()、layout()和 split.screen(),它们设置全局绘图参数和布局选项,以及图形设备。

第二部分介绍了 ggplot2 包中的函数,从 qplot()和 ggplot()开始。函数 qplot()和 ggplot()在许多方面比早期的 R 函数更容易使用。事实上,ggplot2 包中使用的语法需要很长的名称和参数字符串,但是 RStudio 中的自动完成功能使得代码输入非常容易。

本书的第三部分包括六个附录,包含图形和统计软件包中的预设绘图功能。附录按要显示的对象类型排序。

1.1 plot()、par()、layout()和 split.screen()

函数 plot()获取一个或多个对象,并根据对象的类别创建图像。plot()有许多影响图像外观的参数。可以在对 plot()的调用中给定参数值,或者可以使用函数 par()对许多参数进行全局赋值。在最初调用 plot()之后,有几个辅助函数可以用来添加到图像中。如果用户的目标是在一个页面上有多个绘图,可以使用函数 par()、layout()或 split.screen()来设置多个绘图的格式。

在第二章中,我们描述了 plot()函数的基础。在第三章中,对 plot()的各种参数进行了分类。绘图()的辅助函数在第四章中介绍。在第五章中,介绍了定义绘图()的方法(绘图类型)。在第六章中,描述了函数 par()的可能参数,并给出了使用 par()、layout()或 split.screen()设置多个图的方法。此外,图形设备也包括在内。

1.2 qplot()和 ggplot()

ggplot2 包中的函数 qplot()和 ggplot()提供了 plot()的替代方法。qplot()和 ggplot()生成的默认图看起来比 plot()生成的默认图更好。对于简单的绘图,qplot()足以给出一个看起来很优雅的图形。函数 ggplot()提供了比 qplot()更多的绘图选项。ggplot2 包中使用的一些语法在标准 r。

在 ggplot2 中,可以使用 theme()或以“theme_”开头的预设主题函数来定义图形的主题。要绘制的对象是“映射”,并在 aes()函数中指定。要显示的图像类型是几何图形或统计数据,由以“geom_”或“stat_”开头的函数指定。可以使用 aes()、aes_ "函数、geom_ "函数、stat_ "函数和/或其他格式化函数来更改图形的外观。可以使用不止一种美学、几何学和统计学来创建图像。可以通过从另一个函数中运行格式化函数或者通过单独运行格式化函数来改变图像的外观。

在第七章中,我们来看看 qplot()、ggplot()和 ggplot2 包的语法。第八章介绍了主题()、“主题 _”和“元素 ”函数,以及 aes()和“aes”函数。在第九章中,描述了几何、统计、注释和 borders()函数。第十章讲述了 ggplot2 包中的各种功能,这些功能也改变了图像的外观。

1.3 附录

除了基本包和 ggplot2 包中的 plot()、qplot()和 ggplot()之外,graphics 和 stats 包中还有许多绘图函数。这些函数对于数据清理、数据探索和/或模型拟合非常有用。对于许多函数,plot()使用的图形参数是可以赋值的。本书末尾的附录中给出了专门的绘图函数,以及这些函数的用途和使用方法的简要说明。

附录 A 列出了与列联表一起使用的函数。附录 B 给出了连续变量的函数。附录 C 列出了生成多个图的函数。附录 D 给出了平滑数据的函数。附录 E 给出了时间序列分析中使用的绘图函数。附录 F 列出了 stats 和 graphics 包中的绘图函数,这些函数在前五个附录中没有涉及。

1.4 本书中使用的软件版本和硬件

本书使用的 R 的版本是 R 4.0.1 和 R 4 . 0 . 3;RStudio 的版本是 1.3.595 和 1.3.1093。由于 R 和 RStudio 不断变化,综合 R 档案网(CRAN)提供 R 的变化新闻,R 4.0.1 和 R 4.0.0 的新闻可以在 https://cran.r-project.org/doc/manuals/r-release/NEWS.pdf 找到。该新闻 pdf 的开头如图 1-1 所示。

img/502384_1_En_1_Fig1_HTML.jpg

图 1-1

r 新闻截图

用于示例的计算机是运行 macOS Catalina 版本 10.15.5 的 MacBook Air。

1.5 图形设备

r 在图形设备中打开图形对象。默认情况下,R 在计算机屏幕上打开图形对象,但是可以使用几种图像格式之一将该对象写入文件。第 6.1 节介绍了图形设备。

r 和 RStudio 通过选择两个程序菜单中的链接,提供了将图形对象保存到图像文件的方法。使用链接时,r 会自动打开和关闭相关设备。

要通过代码使用图形设备,请参阅第 6.1 节或“设备”和 dev.cur()的 R 帮助页。第 6.1.1 节和“设备”的帮助页面都列出了设备上用于打开图形设备以创建特定类型图像文件的功能。第 6.1.2 节和 dev.cur()的帮助页面给出了管理图形设备的功能列表。

二、plot()函数

R 中的 plot()函数从特定 R 类的对象中创建一个图形。调用 plot()得到的图形可以包含文本、线、点和/或图像,图形区域可以用颜色或图案填充。显示的图形种类取决于要显示的对象的类别。例如,单个时间序列(ts 类的对象)给出了一个随时间绘制的线图。

2.1 参数和默认值

默认情况下,图形通常有黑线和文本,以及预设的线条、点和文本大小和粗细。可以在 plot()中设置更改图形的图形属性的参数。一些参数用于改变线条、点或文本的颜色;到线条宽度或样式;以磅或文本大小;到策划人物;到文本的样式和字体粗细;并填充颜色或图案。

其他参数为轴标签设置可选文本,或者为图形提供主标题和副标题。可以更改标题或标签中文本的方向、样式和粗细。

轴可以包含或不包含在 plot()创建的图形中。如果最初包含轴,轴的颜色和刻度线的颜色可以通过 plot()中的参数来更改。可以更改轴线宽度、刻度线长度和刻度线间距。

可以在对 plot()的调用中分配轴刻度标签。可以更改轴刻度标签的颜色、大小和方向。如有必要,可用 plot()生成一个空白图形对象。在第三章中,我们仔细观察了可用于绘图()的参数。

2.2 辅助函数

在最初调用 plot()之后,可以使用辅助函数将图形信息添加到原始图形中。这些功能用于在原始图上覆盖其他图,并向图添加注释。例如,可以向散点图添加回归线,或者在图中包含图例。

有几个辅助函数。可以使用辅助函数 title()来添加标题和轴标签,而不是在原始的 plot()调用中包含标题和轴标签。如果在对 plot()的调用中抑制了轴,则可以使用函数 axis()添加轴。回归线可以添加到图形中(有几种方法)。

大部分辅助函数都是同名的,比如文本()、点()、线()、段()和箭头()。其他的不是,比如 polypath()或者 clip()。在第四章中,我们列出了图形和统计软件包中的辅助函数,并展示了每个函数的用法。

2.3 方法

函数的方法是为其定义函数的那些对象类。在图形和统计软件包中,为 plot()定义了 29 种方法。

在第三章第三章和第四章第三章中,我们通常使用 plot()的版本,该版本将一个 x,也可能是一个 y 作为要绘制的对象,并绘制一个 x 对索引值或 y 对 x 的散点图。该函数的实际名称是 plot.default()。

但是,由于 R 在运行 plot()时会自动确定要使用的方法。default”扩展在对 plot()的调用中不是必需的。对于 plot.default(),x 和 y 需要是长度相等的向量,可以强制为数字。第五章给出了 plot()的方法,以及每个方法创建的内容。

2.4 图形设备和函数 par()、layout()和 split.screen()

r 图在图形设备中创建。图形设备可以在计算机屏幕上打开,也可以在 r 外部的文件中打开。(有些图形设备是特定于给定的操作系统的。)第一部分中涉及的绘图函数所使用的参数可以在 plot()函数和辅助函数中指定。当在绘图函数中赋值时,参数将在指定参数的特定函数中使用。要全局分配参数,可以在 par()函数中分配参数。

par()函数包含 plot()的许多参数和辅助函数使用的默认值。par()的默认参数可以通过调用 par()来更改——对于给定的 R 会话或在函数调用中。par()中的大多数参数与 plot()中影响图形外观的参数相同。par()中的某些参数只能在 par()中设置。

r 允许在一个图形中放置多个图。可以使用 par()的两个参数之一创建多个图的网格。par()创建的网格每行都有相同数量的列。或者,可以使用函数 layout()来创建更灵活的设计,每行中的列数不同。split.screen()函数允许在图形设备的不同位置放置绘图。

在第六章中,列出了图形设备的类型以及使用图形设备的方法。更多关于 par()、layout()和 split.screen()的内容也可以在第六章中找到。

2.5 一个例子

在图 2-1 中,给出了一个使用默认参数绘制太阳黑子年时间序列图(来自数据集包)的示例,以及使用一些参数集绘制的相同图。这两块地绘制在一张图中。

img/502384_1_En_2_Fig1_HTML.jpg

图 2-1

黑子.年时间序列图(可在 R。第一个图使用图()中的默认参数设置。在第二个绘图中,设定了一些论点。

太阳黑子. year 的类别是 ts,因此时间序列中的值是相对于时间绘制的。默认的轴标签是 x 轴上的时间和 y 轴上绘制的对象名称。默认情况下,不打印标题或副标题。

对于上图,函数 par()用于将一行中的两个图放入一个图中。在 plot()运行两次后,通过再次运行 par()将每个图形的绘图数改回 1。对 par()的更改在整个 R 会话中保持有效,除非进行了更改。

三、plot()参数

plot()中可以使用许多参数。在这一章中,我们将讨论这些论点。这些参数按类别分组–影响整体外观、线条和点的外观以及细节的参数。我们通过使用来自 R 数据集的数据的例子来看对图形外观的影响。在本章中,示例中使用了绘制散点图的函数 plot.default()。虽然本章中的大多数参数可用于所有或大多数版本的 plot(),但也有一些参数是 plot.default()所特有的。

3.1 数据集

在本节中,我们使用数据集包中的LifeCycleSavings数据集。由于在 RStudio 中默认加载数据集包,因此对于大多数用户来说,数据集是可以访问的。要将数据集带入工作空间以便查看内容,请在 R 提示符下输入以下内容:

data( "LifeCycleSavings" )

要在 RStudio 中查看数据集,请双击“LifeCycleSavings”(在右上方窗格的环境窗口的数据部分)。将显示控制台(左下窗口)

> force(LifeCycleSavings)
                  sr pop15 pop75     dpi  ddpi
Australia      11.43 29.35  2.87 2329.68  2.87
Austria        12.07 23.32  4.41 1507.99  3.93

(这里只显示前两个观察值。)数据集也将出现在源(左上角)窗口中。

R 文档中对数据集的描述如下:

|

[,1]

|

先生

|

数字

|

个人储蓄总额

|
| --- | --- | --- | --- |
| [,2] | pop15 | 数字 | % 15 岁以下人口 |
| [,3] | pop75 | 数字 | % 75 岁以上人口 |
| [,4] | dpi | 数字 | 实际人均可支配收入 |
| [,5] | ddpi | 数字 | % dpi 增长率 |

  • 国家间生命周期储蓄数据

  • 描述

  • 1960-1970 年储蓄率的数据。

  • 用法

  • 生命周期飞行器

  • 格式

  • 对 5 个变量进行 50 次观察的数据框架。

  • 详情

  • 根据弗朗哥·莫迪利阿尼提出的生命周期储蓄假说,储蓄率(个人储蓄总额除以可支配收入)由人均可支配收入、人均可支配收入的变化率以及两个人口变量来解释:15 岁以下人口的百分比和 75 岁以上人口的百分比。这些数据是对 1960 年至 1970 年这十年的平均值,以去除商业周期或其他短期波动。

  • 来源

  • 这些数据来自贝尔斯利、库赫和韦尔施(1980 年)。他们又从 Sterling (1977)获得了数据。

  • 参考文献

  • Sterling,Arnie (1977)未发表的学士论文。麻省理工学院。

  • 贝尔斯利,地方检察官,Kuh。e .和 Welsch,R. E. (1980 年)回归诊断。纽约:威利。

—R 数据集包的文档

数据集中的五个变量是个人储蓄总额(sr)、15 岁以下人口的百分比(pop15)、75 岁以上人口的百分比(pop75)、实际人均可支配收入(dpi)和实际人均可支配收入的百分比增长率(ddpi)。变量值是 1960-1970 年间的平均值,是 50 个国家的平均值。

3.2 更改图中的整体外观( )

plot()的第一个参数总是 x——一个适当类的 R 对象。如果 x(或 x 和 y)是数值类的 vector 对象,plot()绘制散点图。(对于散点图,可以包括与 x 长度相同的数字向量 y,但这不是必需的。)第一个示例是使用 plot()参数默认值的散点图。

在清单 3-1 中,给出了绘制默认散点图的代码。散点图是 15 岁以下人口百分比(y)与 75 岁以上人口百分比(x)的关系图,两者均来自生命周期储蓄数据集。

对于数据框,数据框中的变量可通过数据框名称后接美元符号再接变量名来访问。例如,LifeCycleSavings $ pop75 访问 life cycles savings 数据框中的 pop75 变量。

plot(
  LifeCycleSavings$pop75,
  LifeCycleSavings$pop15
)

Listing 3-1The code for a default scatterplot

该图如图 3-1 所示。

img/502384_1_En_3_Fig1_HTML.jpg

图 3-1

生命周期保存数据集中两个变量的默认散点图

请注意,第一个参数在 x 轴(水平轴)上,第二个参数在 y 轴(垂直轴)上。此外,图形不包含标题或副标题,轴标签包含数据集中变量的名称。这些点是分散的,因此最极端的点靠近轴。在这一章中,我们将展示如何通过设置参数来改变这个绘图的外观。

标签和轴限制

标题和副标题可以添加到绘图中,轴标签也可以更改。要添加标题,我们使用 main 参数。标题将显示在图的上方。要添加副标题,我们使用参数 sub。副标题将显示在 x 轴标签下方。为了指定 x 和 y 轴标签,我们使用参数 xlab 和 ylab。将任一项设置为“”都将隐藏标签。对于所有这四个参数,值都是一个字符向量,长度通常为一个元素。

可以通过在字符串中的换行符位置包含“\n”来向字符串添加换行符。或者,包含多个元素的字符向量将每个元素放在单独的一行上(除了参数 sub)。

轴限制是轴开始和结束的值。起始值大于结束值是可接受的选项。为了设置绘图的 x 轴和 y 轴界限,我们使用参数 xlim 和 ylim。这两个参数的格式是长度为 2 的数字向量,其中第一个数字是开始限制,第二个数字是结束限制。默认情况下,不打印超出限制的点。

清单 3-2 给出了一个设置标签和轴参数的例子。

plot(
  LifeCycleSavings$pop75,
  LifeCycleSavings$pop15,
  main="Percentage under 15 versus Percentage over 75\nfor 50 Countries",
  sub="More Under 15 Means Less Over 75 on Average",
  xlab="Percentage over 75",
  ylab="Percentage under 15",
  xlim=c( 0, 5.25 ),
  ylim=c( 18, 52 )
)

Listing 3-2Code to plot a scatterplot where the title, subtitle, x axis label, y axis label, x limits, and y limits have been set

在图 3-2 中,代码已经运行。

img/502384_1_En_3_Fig2_HTML.jpg

图 3-2

使用参数 main、sub、xlab、ylab、xlim 和 ylim 绘制的散点图

3.2.2 框类型、纵横比、注释和扩展绘图

可以更改是否包括边框、要包括的边框类型以及地块的纵横比。此外,可以关闭注释,并且可以在绘图范围之外绘制点。相关的参数是 frame.plot(用于包含边框)、bty(用于框类型)、asp(用于纵横比)、ann(用于注释)和 xpd(用于扩展绘图)。

参数 frame.plot 是一个逻辑单值参数,它告诉 R 是否在绘图周围放置一个框架。如果参数是长度大于 1 的向量,则只使用第一个值,并给出警告。默认值为 TRUE。

如果 frame.plot 为 TRUE,则参数 bty 描述框的类型。该参数采用字符值,并且可以采用值“o”、“l”、“7”、“c”、“u”、“a”、“]”和“n”。值“o”是默认值,表示一个四边框。前六个值(字母的大写字母)看起来像该值创建的盒子的形状。

值“l”绘制左轴和底轴;值“7”绘制右轴和顶轴;值“c”绘制了顶部、左侧和底部轴;值“u”绘制左、下和右轴;值“]”表示底部、右侧和顶部轴。值“n”表示不绘制方框。图 3-3 显示了除默认选项“o”之外的六个选项。

img/502384_1_En_3_Fig3_HTML.jpg

图 3-3

bty 等于“l”、“7”、“c”、“u”、“]”和“n”的框样式示例

以下代码创建了图 3-3 中的六个图。

plot( LifeCycleSavings$pop75, LifeCycleSavings$pop15, bty="l", main="bty = l" )
plot( LifeCycleSavings$pop75, LifeCycleSavings$pop15, bty="7", main="bty = 7" )
plot( LifeCycleSavings$pop75, LifeCycleSavings$pop15, bty="c", main="bty = c" )
plot( LifeCycleSavings$pop75, LifeCycleSavings$pop15, bty="u", main="bty = u" )
plot( LifeCycleSavings$pop75, LifeCycleSavings$pop15, bty="]", main="bty = ]" )
plot( LifeCycleSavings$pop75, LifeCycleSavings$pop15, bty="n", main="bty = n" )

Listing 3-3Plotting with bty set to six different values

在图中,3-3 是由清单 3-3 中的代码生成的图。

要更改绘图的纵横比,我们将 asp 设置为设备上显示的绘图大小所需的宽度单位与高度单位的比率。

r 取图上 y 轴的一个单位的长度,用长宽比乘以该单位,得到图上 x 轴的一个单位的长度。考虑了绘图尺寸的比率。

在 RStudio 中,可以通过改变图形绘制窗口的大小来调整图形的高宽比。更改窗口大小的最简单方法是指向并拖动绘图窗口(RStudio 中的右下窗口)的边缘,使用每个窗口边缘中心的手柄。RStudio 菜单中的视图还提供了使用窗格的选项。将图像保存到文件或剪贴板时,RStudio 提供了更改绘图尺寸的选项,方法是分别调整 x 轴和 y 轴的尺寸。

直接处理图形是一种选择。在 RStudio 中,可以缩放绘图,然后通过指向绘图边缘中心或角落的手柄并拖动进行调整。在 R 中,绘图在石英窗口中打开,可以通过指向和拖动来调整。

图 3-4 中的示例显示了调整图 3-1 的纵横比的效果。在图 3-1 中,x 轴上的单位从 0.5 到 5,y 轴上的单位从 20 到 50。x 轴的宽度是 y 轴高度的 4.5 倍。未设置参数 asp,但从尺寸来看,它是 x 轴上的 4.5 个单位除以 y 轴上的 30 个单位,然后该量除以 4.5(x 轴的物理长度除以 y 轴的物理长度),即 0.033。

img/502384_1_En_3_Fig4_HTML.jpg

图 3-4

设置 asp 的两个例子;asp 等于 0.1,asp 等于 0.01

图 3-4 中的曲线显示了设置 asp 的两个例子。创建图中地块的代码如下(列表 3-4 )。

plot(
  LifeCycleSavings$pop75, LifeCycleSavings$pop15,
  asp=0.1,
  main="asp = 1/10"
)
plot(
  LifeCycleSavings$pop75, LifeCycleSavings$pop15,
  asp=0.01,
  main="asp = 1/100"
)

Listing 3-4The code to demonstrate setting asp in plot()

运行代码的结果如图 3-4 所示。

在第一个图中,asp 设置为 0.1。从图 3-4 中,对于第一个图,y 轴从 20°到 48.4°,x 轴从-0.18°到 5.50°。对于两个轴,图都以 x 和 y 平均值为中心。这块地的大小比例是 1:2(宽是高的两倍。)y 轴的范围 28.4 乘以 0.1 得 2.84;2.84 乘以 2 等于 5.68,x 轴的范围。每单位 x 对应 10 单位 y。

对于第二个图,asp 等于 0.01。地块尺寸的比例仍然是 1:2。y 轴从-80 到 146,而 x 轴从 0.5 到 5.02。将 y 轴的范围 226 乘以 0.01 得到 2.26;而 2.26 乘以 2 就是 4.52,x 轴的范围。每单位 x 有 100 个 y 单位。

参数 ann 告诉 R 是否包含轴标签(或者标题或副标题)。默认值为 TRUE。将 ann 设置为 FALSE 会抑制标签–如图 3-5 所示。

img/502384_1_En_3_Fig5_HTML.jpg

图 3-5

安设定为假的绘图

图 3-5 的代码如下(列表 3-5 )。

plot(
  LifeCycleSavings$pop75, LifeCycleSavings$pop15,
  ann=FALSE
)

Listing 3-5The code for plotting with ann set to FALSE

代码产生的图如图 3-5 所示。

通过使用参数 xpd,可以在绘图限制之外绘制点(和线)。xpd 的默认值为 FALSE–不绘制超出绘图限制的点。将 xpd 设置为“真”会绘制出超出绘图限制但在绘图区域内的任何点。将 xpd 设置为 NA 将打印图形显示区域内超出绘图限制的任何点。图 3-6 显示了三个选项,图上的 x 极限设置为 2 和 3。

img/502384_1_En_3_Fig6_HTML.jpg

图 3-6

设置 xpd 的示例

图 3-6 中的地块代码如下(列表 3-6 )。

plot(
  LifeCycleSavings$pop75, LifeCycleSavings$pop15, xlim=c( 2, 3 ),
  xpd=FALSE,
  main="xpd = FALSE"
)

plot(
  LifeCycleSavings$pop75, LifeCycleSavings$pop15, xlim=c( 2, 3 ),
  xpd=TRUE,
  main="xpd = TRUE"
)

plot(
  LifeCycleSavings$pop75, LifeCycleSavings$pop15, xlim=c( 2, 3 ),
  xpd=NA,
  main="xpd = NA"
)

Listing 3-6Code for the examples of the argument xpd in Figure 3-6

参见下面图 3-6 中运行清单 3-6 中的代码得到的曲线图。

3.3 点和线

r 图在大多数情况下由点和线组成——尽管可以添加文本和图像,或者可以作为某些类别对象的默认图的一部分。使用绘图字符绘制点。任何只有一个字符的字符串都可以用作点的绘图字符,在大多数设备上也可以是许多符号。

线条可以绘制为实线,也可以绘制为许多虚线图案中的一种。在本节中,我们来看看点和线的一些选项。

3.3.1 地块类型

函数 plot()允许九种绘图类型,由参数类型设置。在 plot()的 R 帮助页面中,参数类型可以采用值“p”表示点,“l”表示线,“b”表示两者,“c”表示“b”的线部分,“o”表示线在点上绘制的点和线,“h”表示垂直线(在数据点的高度),“S”表示从水平到垂直的阶跃函数,“S”表示从垂直到水平的阶跃函数,“n”表示不绘制。

图 3-7 中给出了设置为“l”、“b”、“c”和“o”的类型示例。清单 3-7 中的代码产生了这些绘图。(使用了我们一直在绘制的相同数据点,但是首先对 pop75 数据进行排序,排序用于对 pop15 数据点进行排序。这样的话,线条就很有条理了。)

img/502384_1_En_3_Fig7_HTML.jpg

图 3-7

类型等于“l”、“b”、“o”和“c”的图的示例

由于用于给图 3-7 中的图命名的字符串包含字符串值,转义字符“\”允许引号显示在标题内。

ord = order(
  LifeCycleSavings$pop75
)
pop75.ordered = LifeCycleSavings$pop75[ ord ]
pop15.ordered = LifeCycleSavings$pop15[ ord ]

plot(
  pop75.ordered, pop15.ordered

,
  type="l",
  main="type = \"l\""
)
plot(
  pop75.ordered, pop15.ordered,
  type="b",
  main="type = \"b\""
)
plot(
  pop75.ordered, pop15.ordered,
  type="o",
  main="type = \"o\""
)
plot(
  pop75.ordered, pop15.ordered,
  type="c",
  main="type = \"c\""
)

Listing 3-7Code to create ordered points and to create plots for type set equal to “l”, “b”, “o”, and “c”

图 3-7 如下。

在图 3-8 中,给出了类型“h”、“S”、“S”和“n”的选项示例。先给出代码(列出 3-8 )。

img/502384_1_En_3_Fig8_HTML.jpg

图 3-8

类型设置为“h”、“S”、“S”和“n”的图示例

plot(
  pop75.ordered, pop15.ordered,
  type="h",
  main="type = \"h\""
)
plot(
  pop75.ordered, pop15.ordered,
  type="s",
  main="type = \"s\""
)
plot(
  pop75.ordered,  pop15.ordered,
  type="S",
  main="type = \"S\""
)
plot(
  pop75.ordered, pop15.ordered,
  type="n",
  main="type = \"n\""
)

Listing 3-8Code for plots in Figure 3-8

图 3-8 如下。

3.3.2 参数 pch 和 lty

为了设置绘图字符,我们使用参数 pch。参数 pch 可以设置为用户设备上 R 可用的任何单字符值或单字符值集合(参见第 3.4 节)。此外,整数 0–25 可用于绘制 R 中可用的符号。如果 pch 设置为等于值的集合,则在绘制点时 R 会循环遍历这些值。在列表 3-9 和图 3-9 中,为图 3-1 中的一些点绘制了 26 个符号。

img/502384_1_En_3_Fig9_HTML.jpg

图 3-9

使用 R 符号作为绘图字符的示例

plot(
  pop75.ordered[18:43],
  pop15.ordered[18:43],
  main="pch = 0:25",
  pch=0:25
)

Listing 3-9Code for the example of pch using the R symbols

线条由实线或点线和/或虚线组成。线的类型由参数 lty 指定。在 par()的 R 帮助页面中,参数可以采用数值,0 表示无线条,1 表示实线,2 表示虚线,3 表示虚线,4 表示点划线,5 表示带长破折号的线条,6 表示双破折号。该参数还可以采用字符串“空白”、“实心”、“虚线”、“点划线”、“点划线”、“长划线”和“双划线”,它们给出的结果与数字相同。

用户可以创建由 2、4、6 或 8 个十六进制数字的字符串组成的自定义模式。第一个数字是线的第一部分的单位长度的数量,第二个数字是多少个单位长度留为空白,等等。对于大多数设备,单位长度是 1/96 英寸。例如,将 lty 设置为“626565”会拼出“米米·米……”用莫尔斯电码。lty 等于“626565”的线见清单 3-10 和图 3-10 。

img/502384_1_En_3_Fig10_HTML.jpg

图 3-10

自定义线条样式的示例

plot(
  pop75.ordered, pop15.ordered,
  type="l",
  lty="626565",
  main="lty = \"626565\""
)

Listing 3-10Case of setting a custom line style

图 3-10 如下。

3.4 细节

本节涵盖了在 plot()中可以更改的无数小细节。这些部分包括颜色、字符字体样式和粗细、字符大小、线条质量、轴样式和使用对数刻度。

3.4.1 颜色

plot()中生成的任何内容都可以被指定一种颜色。有七个与颜色相关的参数:col、col.main、col.sub、col.lab、col.axis、bg 和 fg。参数 col 设置绘制内容的颜色。参数 col.main、col.sub、col.lab 和 col.axis 分别设置标题、副标题、标签和轴的颜色。在 plot()中,fg 设置绘图周围方框的颜色,bg 设置 pch 的 21–25 的填充颜色,否则没有效果。

col.main、col.sub、col.lab、col.axis 和 fg 的值必须是一个元素颜色指示符。col 和 bg 的值可以是颜色指示器的多元向量。对于绘图类型“p”、“b”、“c”和“h”中的点,颜色将在这些点之间循环。对于绘图类型“l”、“b”、“c”、“S”和“S”中的线条,线条采用 col 中第一个值的颜色。

3.4.1.1 用字符串分配颜色

R 中的颜色可以用字符串、正整数或函数来指定。R 中有 657 种已定义的颜色,每种颜色都有一个名称——比如“浅蓝色”。通过运行 colors()函数列出名称集合。颜色“透明”可用于填充颜色。

颜色也可以由包含十六进制颜色代码的字符串来指定。十六进制代码的形式为“#RRGGBBAA”,其中 RR、GG 和 BB 是两位十六进制数,表示颜色中的红色、绿色和蓝色,AA 是可选的,是两位十六进制数,表示颜色的透明度。

对于颜色,值 00 是最暗的色调,值 FF 是最亮的色调。对于透明度,值 00 表示绘图字符完全透明,值 FF 表示绘图字符不透明。如果不包括 AA,透明度级别将设置为 FF。

值“#000000”绘制黑色,值“#FFFFFF”绘制白色。可以通过更改“#000000”的透明度来创建灰度。但是,由 running colors()生成的集合中索引值为 152–253 和 260–361 的元素是颜色“灰色”、“灰色 0”、“灰色 100”和“灰色”、“灰色 0”、“灰色 100”。

灰色和灰色是相同颜色的不同名称,称为别名。颜色“灰色”和“灰色”是浅灰色,而“灰色 0”/“灰色 0”到“灰色 100”/“灰色 100”是从深灰色到浅灰色的灰度。也可以使用 gray()/grey()或 gray.colors()/grey.colors()函数创建灰度。

3.4.1.2 用整数分配颜色

可以使用整数来指定颜色。对于给定的数字,与该数字相关联的颜色由功能调色板()指定。不带参数运行 palette()会给出当前调色板中的颜色——这些颜色按顺序与从 1 开始的整数相关联。运行带参数的 palette()会重置调色板。调色板中的颜色循环,因此 col 的任何正整数值都将返回一种颜色。

palette()中只能设置一个参数。参数可以是包含内置调色板名称的单元素字符向量,也可以是调色板中包含的颜色名称和/或十六进制代码的多元素字符向量。

要查看内置调色板的名称,请运行 palette.pals()。一旦选择了一个调色板,该调色板将一直有效,直到选择了另一个调色板。要返回默认调色板,请运行 palette( "default ")。目前,默认调色板是“R4”。

大多数调色板只有少量的颜色,但是最多可以分配 1024 种颜色。例如,要用 colors()中的 657 种颜色创建调色板,可以运行 palette( colors())。

要选择调色板的子集,请使用函数 palette.colors()。函数 palette.colors()有四个参数。第一个参数是 n,它是一个正整数,告诉 R 选择调色板的前 n 种颜色。如果设置为 NULL(默认值),则使用所有颜色。第二个参数是包含调色板名称的字符串。

第三个参数是 alpha,它设置调色板的不透明度,可以取 0 到 1 之间的值。并非所有设备都支持参数 alpha。零表示完全透明,一表示完全不透明。第四个参数是 recycle,它告诉 R 如果 n 大于调色板中的颜色数,就回收颜色。recycle 的默认值为 FALSE。如果 recycle 为 FALSE,并且 n 大于颜色数,则返回所有颜色并给出警告。

3.4.1.3 用函数分配颜色

有一些函数可以生成颜色代码。函数 hsv()、hcl()、hcl.colors()、rgb()、rainbow()、heat.colors()、terrain.colors()、topo.colors()、cm.colors()、gray()和 gray.colors()生成十六进制代码来指定颜色。

函数 hsv()根据颜色的色调、饱和度和值生成代码。该函数有三个参数,h、s 和 v,分别代表色调、饱和度和值。这三个参数采用介于 0 和 1 之间的数值向量。向量不需要具有相同的长度,并且向量循环。

不是在 hsv()中输入三个单独的向量,而是可以输入一个具有三列的矩阵,其中第一列给出 h 的值,第二列给出 s 的值,第三列给出 v 的值。

参数 h 给出颜色的色调,0 表示红色,1 表示紫红色,阴影从红色到橙色到黄色到绿色到蓝色到紫色到紫色到紫红色。参数 s 给出了颜色的深度,0 表示没有颜色(如果 v 等于 0 则为黑色,如果 v 等于 1 则为空白),1 表示最强的颜色。参数 v 给出了颜色中黑色的数量,0 表示黑色,1 表示没有黑色的颜色。

函数 hcl()根据颜色的色调、色度和亮度创建十六进制颜色代码。该函数有五个参数:h 代表色调,默认为 0;c 为色度,默认为 32;l 表示亮度,默认为 85;α,它没有默认值;和修正,这在默认情况下是正确的。并非所有设备都支持参数 alpha。

参数 h 可以采用从 0 到 360 的数值。零是红色,120 是绿色,240 是蓝色。数字之间的色调阴影——在一个圆圈中。参数 c 相当于 hsv()函数中的饱和度,但可以取任何非负值。但是,如果该值大于 360,色调会发生变化。

参数 l 的操作类似于 hsv()函数中的 value 参数,但它采用 0 到 100 之间的数值。参数 alpha 设置颜色的透明度级别,0 表示完全透明,1 表示不透明。参数 fixup 如果设置为 TRUE,将把非法的颜色代码更改为合法的代码。

函数 hcl.colors()为给定的 hcl 调色板生成十六进制代码。通过运行 hcl.pals()列出 hcl 调色板集合。函数 hcl.pals()接受一个参数——类型。默认情况下,type 等于 NULL–为此列出所有 hcl 调色板。类型的其他选项有“定性”、“连续”、“发散”和“发散 x”。有关在何处使用这四种类型的讨论,请参见 hcl.pals()的帮助页面。

hcl.colors()的参数是 n,表示要选择的颜色数量;调色板,用于 hcl 调色板名称;α,为透明度水平;rev,反转颜色的顺序;和修正,用于修正非法的颜色规范。自变量 n 是正整数;调色板是一个 hcl 调色板名称,默认为“Viridis”;alpha 如 hsv()描述中所述,默认为 NULLrev 是一个一元逻辑向量,默认值为 FALSE 而 fixup 是一个单元素逻辑向量,默认值为 TRUE。

函数 rgb()根据颜色中的红色、绿色和蓝色级别生成十六进制颜色代码。该函数接受六个参数:红色、绿色、蓝色和 alpha,并非所有设备都支持;名称,默认为空;和 maxColorValue,默认为 1。maxColorValue 的值是红色、绿色、蓝色和 alpha 可以采用的最大值。根据 rgb()的帮助页面,如果 maxColorValue 设置为等于 255,则红色、绿色、蓝色和 alpha 将被强制为 0 到 255 之间的整数值,并且该算法是最有效的。但是,任何正数都可以用作 maxColorValue。参数 names 为颜色指定名称,但没有其他作用。

函数 rainbow()创建了一个十六进制颜色代码的光谱。该函数采用参数 n,表示要生成的代码数量;s,为饱和度;v,为价值层面;开始,为开始的色调;end,为结尾色调;alpha,表示透明度(并非所有设备都支持);rev,反转颜色。

参数 s、v、start、end 和 alpha 是单元素数值向量,必须介于 0 和 1 之间,包括 0 和 1。对于 s 和 v,默认值为 1。对于 start,默认值为 0。对于 end,默认值是 max(1,n-1)/n。随着色调从 0 到 1,颜色从红色到橙色到黄色到绿色到蓝色到紫色到紫色到紫红色。参数 rev 是一个逻辑变量,默认值为 FALSE。

函数 heat.colors()、terrain.colors()、topo.colors()和 cm.colors()都采用相同的三个参数——n、alpha 和 rev,其定义与 rainbow()中的相同。(cm.colors()中的 cm 代表青色洋红色。)

gray()/grey()函数为灰色渐变创建十六进制颜色代码。该函数的参数是 level 和 alpha。参数级别是一个数值向量,取 0 到 1 之间的值,给出颜色灰度的色调,0 表示黑色,1 表示白色。参数 alpha 是透明度,取值范围从 0 到 1,0 表示透明,1 表示不透明。参数 level 和 alpha 没有默认值。

在清单 3-11 和图 3-11 中,生成并绘制了十六进制颜色代码。

img/502384_1_En_3_Fig11_HTML.jpg

图 3-11

使用 gray()将灰度分配给 col 的示例

> gray(
+     ( 11:60 )/100,
+     1
+ )[1:7]
[1] "#1C1C1CFF" "#1F1F1FFF" "#212121FF" "#242424FF" "#262626FF"
[6] "#292929FF" "#2B2B2BFF"

> plot(
+     pop75.ordered, pop15.ordered,
+     main="col=gray( ( 11:60 )/100, 1 )",
+     col=gray( ( 11:60 )/100, 1 )
+ )

Listing 3-11Code to demonstrate generating and plotting hex color codes on the gray scale

图 3-11 如下。

函数 gray.colors()/grey.colors()比 gray()/grey()更容易使用,也更灵活。该函数有六个参数。前三个是 n 代表颜色的数量;start 为灰度的开始级别,默认为 0.3;和 end 为结束灰度级,默认为 0.9。参数 start 和 end 必须介于 0 和 1 之间,并且 n 必须是正整数。

第四个参数是 gamma——代表非线性梯度。自变量 gamma 是起点和终点的指数。较小的值可以是负值,梯度较小。将 gamma 设定为 1 会产生线性渐变。参数必须是长度能被 n 整除的数值向量。参数循环,默认值为 2.2。

最后两个参数是透明度的 alpha 是透明的,1 是不透明的(不是所有设备都支持)rev 告诉 R 如果设置为 TRUE 就反转颜色的顺序,默认情况下是 FALSE。参数 alpha 必须介于 0 和 1 之间,包括 0 和 1。

有两个函数可以在 rgb、字符串和 hsv 规范之间进行转换。函数 col2rgb()将字符串颜色规格转换为 rgb 代码。该函数有两个参数:col(在 plot()中可用作 col 参数值的任何对象)和 alpha(指示是否返回 alpha 级别的逻辑变量,默认情况下为 FALSE)。在清单中,3-12 是该函数的一个例子。

> col2rgb(
+     list( "#ffffff", "gray", 1, 3 ),
+     alpha=TRUE
+ )
      [,1] [,2] [,3] [,4]
red    255  190    0   97
green  255  190    0  208
blue   255  190    0   79
alpha  255  255  255  255

Listing 3-12Example of the function col2rgb()

函数 rgb2hsv()将红色、绿色和蓝色级别转换为色调、饱和度和值级别。该函数有四个参数——r、g、b 和 maxColorValue——如 rgb()描述中所述。

在清单 3-13 中,给出了 rgb2hsv()的两个例子。

> rgb2hsv(
+     200,
+     200,
+     0,
+     maxColorValue = 255
+ )
       [,1]
h 0.1666667
s 1.0000000
v 0.7843137

> rgb2hsv(
+     1,
+     1,
+     0,
+     maxColorValue = 1.275
+ )
       [,1]
h 0.1666667
s 1.0000000
v 0.7843137

Listing 3-13Two examples of rgb2hsv()

注意,对 rgb2hsv()的两次调用给出了相同的结果。

根据 R 中的帮助页,不同的操作系统使用不同的色基。请参阅 colorConvert()和 colorConverter()的帮助页面,了解有关在基底之间进行转换的更多信息。此外,要创建色彩空间,请参阅 make.rgb()的帮助页面。

3.4.2 字体和字体系列

字体是图形中显示的文本样式。字体有族,有粗细。家族给出了字体的设计。粗细给出了字体的深度和倾斜度。R 可用的字体系列主要取决于显示图形的设备,尽管 Hershey 矢量字体内置于 R 中。对于大多数系列,粗细可以是普通、粗体、斜体或粗斜体。

3.4.2.1 字体系列和在绘图中指定字体系列( )

在 plot()中,显示文本的字体系列由参数系列指定。该参数采用一个包含字体名称的单元素字符向量。family 的值会影响标题、副标题、轴标签、轴刻度标签和绘图字符。

在 par()的帮助页中,参数必须最多为 200 个字节。可以使用显示图形的设备上可用的任何字体系列,以及 Hershey vector 字体。家庭的名字必须与所列的完全一致。

family 的默认值是“”,它告诉 r 使用设备的默认字体——在我的设备上是“Arial Unicode”(在 Finder ➤ Go ➤计算机➤ Macintosh HD ➤库➤字体中查找。)通过访问制造商的帮助页面,或者对于台式机和笔记本电脑,通过打开 pages 或 Word 等程序并查看可用字体,可以找到制造商设备上可用的系列。

在 R 中,Hershey 矢量字体系列是内置的。因为字体是由矢量(直线)组成的,所以开发字体是为了在绘图时使用,并在旋转和调整大小时保持形状。在 R 中的 Hershey 帮助页面中,有八个 Hershey 字体系列可供 plot()使用:“HersheySerif”、“HersheySans”、“HersheyScript”、“HersheyGothicEnglish”、“HersheyGothicGerman”、“HersheyGothicItalian”、“HersheySymbol”和“HersheySansSymbol”。

要查看 Hershey 系列可用的非标准字符,请在 R 或 RStudio 中运行 demo( Hershey)。在下面给出的内容中,转义符是告诉 R 绘制给定的非标准字符的代码。该演示列出了以下内容:

  1. 可用的族样式和线宽(西里尔族和 EUC 族不能通过 plot()获得)

  2. 符号族的转义签名

  3. 非 ASCII Latin-1 字符的转义签名–可用于除 symbol 系列之外的所有 Hershey 系列

  4. 特殊转义签名–主要用于占星符号,但也有一些其他符号,可用于任何可与 plot()一起使用的好时家族

  5. 西里尔八进制代码–无法通过 plot()获得

  6. 两页原始转义符–可用于在 plot()中指定的任何族

对于原始代码和特殊代码,该系列不影响打印的字符。

要在 plot()中使用字体系列,请将系列设置为字体系列的名称。转义符可以直接在字符串中使用。r 将正确解释转义符。

在清单 3-14 中,给出了将“HersheySerif”设置为字体族并在标题中为花盆使用转义签名的代码。

plot(
  pop75.ordered, pop15.ordered,
  family="HersheySerif",
  main="The Young   \\#H0864   The Old"
)

Listing 3-14Code to set the HersheySerif family as the font family in plot() and to use the escape signature for a flower pot in the title

在图 3-12 中,生成了图。

img/502384_1_En_3_Fig12_HTML.jpg

图 3-12

HersheySerif 字体系列的示例,标题中有花盆的转义签名

绘图中的 3.4.2.2 字体粗细( )

字体粗细由参数 Font、font.main、font.sub、font.lab 和 font.axis 设置,分别用于绘图字符、标题、副标题、轴标签和轴刻度标签。参数采用 1–4 的整数值。一些字体系列允许更大的整数,例如“HersheySerif”中的 5、6 和 7。通常,将字体设置为 1 会给出纯文本;将字体设置为 2 会给出粗体文本;将字体设置为 3 会产生斜体文本;将字体设置为 4 会给出粗体和斜体文本。然而,给出的效果并不总是成立的。

在清单 3-15 中,显示了设置字体权重的代码,其中字体参数被设置为 1–7。

plot(
  pop75.ordered, pop15.ordered,
  main="font.main = 4, font = 2, font.axis = 1",
  sub="font.sub = 3",
  xlab="font.lab = 2",
  ylab=" font.lab = 2",
  pch="2",
  font=2,
  font.main=4,
  font.sub=3,
  font.lab=2,
  font.axis=1
)

plot(
  pop75.ordered, pop15.ordered,
  main="font.main = 5, font.axis = 2",
  sub="font.sub = 6",
  xlab="font.lab = 7",
  ylab=" font.lab = 7",
  pch="1",
  font.main=5,
  font.sub=6,
  font.lab=7,
  font.axis=2
)

Listing 3-15Code for an example of font arguments set equal to 1–7

运行清单 3-15 中代码的结果如图 3-13 所示。

img/502384_1_En_3_Fig13_HTML.jpg

图 3-13

更改权重参数的示例:在第一个图中,font=2,font.main=4,font.sub=3,font.lab=2,font.axis=1。在第二个图中,未设置 font,font.main=5,font.sub=6,font.lab=7,font.axis=2

请注意,如果给定了 font,轴刻度上的标签是 font 参数的权重。

3.4.3 图中的字符大小( )

默认字符大小由 r 设置。要确定绘图字符的默认字符大小,有四个只读(不能设置,但可以读取)变量提供字符大小:cin、cra、csi 和 cxy。

参数 cin 是以英寸为单位的字符的宽度和高度;如果像素对设备有意义,cra 是以像素为单位的字符的宽度和高度(否则,通常约为 1/72 英寸);csi 是以英寸为单位的字符高度;cxy 应该是 cin 的两个元素除以参数 pin 的两个元素,参数 pin 是一个可设置的参数,是以英寸为单位的绘图区域的尺寸。

参数 cin、cra、csi 和 cxy 可以通过使用函数 par()读取——参见清单 3-16 中的代码。

> par( "cin", "cra", "csi", "cxy", "pin" )
$cin
[1] 0.15 0.20

$cra
[1] 10.8 14.4

$csi
[1] 0.2

$cxy
[1] 0.1621959 4.0434891

$pin
[1] 4.135000 1.399583

Listing 3-16The read-only character size arguments, cin, cra, csi, and cxy, and the settable variable pin

对于 cxy,如果绘图区域尚未调整,则元素等于预期值。然而,如果绘图区域改变,那么 cxy 的值不等于应该的值。参见清单 3-17 和 3-18 。

> par( pin = c( 3, 1.5 )  )

> par( "cin", "cxy", "pin" )
$cin
[1] 0.15 0.20

$cxy
[1] 0.22356 3.77280

$pin
[1] 3.0 1.5

> par( "cin" )/par( "pin" )
[1] 0.0500000 0.1333333

Listing 3-18Setting

the value of pin and the values of cin, cxy, pin, and cin/pin after the change

> par( "pin" )
[1] 4.135000 1.399583

> par( "cin" )/par( "pin" )
[1] 0.0362757 0.1428997

> par( "cxy" )
[1] 0.0362757 0.1428997

Listing 3-17The values of pin, cin/pin, and cxy when the plotting region has not been adjusted

有关更多信息,请参见 par()的帮助页面。

绘图中的字符大小由参数 cex、cex.main、cex.sub、cex.lab 和 cex.axis 设置,这些参数分别改变绘图字符以及标题、副标题、轴标签和轴刻度标签中的字符的大小。对于所有的参数,默认的字符大小都是相对于 cex 值的。但是,更改 plot()中的 cex 不会影响其他图形元素的大小。(参数 cex 可以在 par()中更改——这会影响其他图形元素。)

默认情况下,cex 参数的值为 1,这意味着字符的大小由 cin 的值给出。cex.main 的默认值是 1.2。cex.sub、cex.lab 和 cex.axis 的缺省值都是 1。设置任何 cex 参数的值都会将默认字符大小乘以该参数的值。

关于使用 cex、cex.main、cex.sub、cex.lab 和 cex.axis 的示例,请参见清单 3-19 和图 3-14

img/502384_1_En_3_Fig14_HTML.jpg

图 3-14

更改 cex、cex.main、cex.sub、cex.lab 和 cex.axis 的示例

plot(
  pop75.ordered, pop15.ordered,
  main="cex.main = 1.5, cex=0.4, cex.axis = 0.7",
  sub="cex.sub = 1.5",
  xlab="cex.lab = 1.2",
  ylab="cex.lab = 1.2",
  cex=.4,
  cex.main=1.5,
  cex.sub=1.5,
  cex.lab=1.2,
  cex.axis=0.7
)

Listing 3-19Code of the example of using the five cex arguments

运行清单 3-19 中代码的结果如图 3-14 所示。

3.4.4 线路详细信息:lwd、lend、ljoin 和 lmitre

可以设置 plot 生成的线的样式。线宽可以设置;对于线端和线接头的样式,有几个选项。影响线条的四个参数是 lwd、lend、ljoin 和 lmitre。

参数 lwd 影响线条的宽度。该参数可以设置为任何正数,默认值为 1。根据 par()的帮助页面,lwd 的图形解释取决于绘制图形的设备,因此设备之间的效果可能不一致。

参数 lend 描述了行尾的样式。该参数可以是整数值 0、1 或 2,也可以是字符值“round”、“butt”或“square”。默认值为 0 或“四舍五入”。

在清单 3-20 和图 3-15 中,给出了 lwd 和 lend 的示例。

img/502384_1_En_3_Fig15_HTML.jpg

图 3-15

更改 lwd 和 lend 的示例——分别使用默认图(lwd=1 和 lend=0)以及 lwd=2、3 和 4 和 lend=0、1 和 2 的图

plot(
  pop75.ordered, pop15.ordered, type="b",
  main="default plot",
  xlim=c( 2, 3 )
)

plot(
  pop75.ordered, pop15.ordered, type="b",
  main="lwd=2, lend=0",
  lwd=2,
  xlim=c( 2, 3 )
)

plot(
  pop75.ordered, pop15.ordered, type="b",
  main="lwd=3, lend=1",
  lwd=3,
  lend=1,
  xlim=c( 2, 3 )
)

plot(
  pop75.ordered, pop15.ordered, type="b",
  main="lwd=4, lend=2",
  lwd=4,
  lend=2,
  xlim=c( 2, 3 )
)

Listing 3-20Code for the example of the arguments lwd and lend

图 3-15 如下。

参数 ljoin 影响线条的连接方式。ljoin 有三种可能,也可以是数字或字符串:0 或“圆”,1 或“斜”,2 或“斜角”。如果选择了 1 或“斜接”,那么可以设置参数 lmitre 来控制斜接变成斜接的位置。(从 par()的帮助页面,有些设备不受斜接的影响。)ljoin 的默认值为 0 或“round”;lmitre 的默认值是 10;并且 lmitre 必须大于或等于 1。

见图 3-16 中斜接以及圆形和斜面连接的示例。在清单 3-21 中,给出了展示 ljoin 和 lmitre 的四个图的代码。

img/502384_1_En_3_Fig16_HTML.jpg

图 3-16

设置 ljoin 和 lmitre 的示例

plot(
  pop75.ordered, pop15.ordered, type="l", lwd=2,
  main="ljoin = \"round\" (the default)"
)

plot(
  pop75.ordered, pop15.ordered, type="l", lwd=2,
  main="ljoin = \"bevel\"",
  ljoin="bevel"
)

plot(
  pop75.ordered, pop15.ordered, type="l", lwd=2,
  main="ljoin = \"mitre\", lmitre=2",
  ljoin=1,
  lmitre=2
)

plot(
  pop75.ordered, pop15.ordered, type="l", lwd=2,
  main="ljoin = \"mitre\", lmitre=100",
  ljoin=1,
  lmitre=100
)

Listing 3-21Code for the plots showing the effect of ljoin and lmitre

在图 3-16 中,给出了运行代码的结果图。

3.4.5 更改轴

在对 plot()的调用中,有多种方法可以更改轴刻度和轴刻度标签。可以更改轴刻度标签相对于轴的方向。可以将记号设置为从图的边缘或图内一小段距离开始。可以关闭轴刻度和轴刻度标签的绘制。只要小心,刻度的值和间距是可以控制的。可以设置记号的长度和方向。

轴刻度标签的方向由参数 las 设置,它可以取值 0,表示平行于轴;1、为始终水平;2、对于垂直于轴线的;第三,永远垂直。默认值为 0。

在清单 3-22 中,给出了说明四个轴刻度标签样式的四个图的代码。

plot(
  pop75.ordered, pop15.ordered,
  las=0,
  main="las = 0"
)
plot(
  pop75.ordered, pop15.ordered,
  las=1,
  main="las = 1"
)
plot(
  pop75.ordered, pop15.ordered,
  las=2,
  main="las = 2"
)
plot(
  pop75.ordered, pop15.ordered,
  las=3,
  main="las = 3"
)

Listing 3-22Code for the example of las set to 0, 1, 2, and 3

在图 3-17 中,生成了图形。

img/502384_1_En_3_Fig17_HTML.jpg

图 3-17

将轴刻度标签方向参数 las 设置为 0、1、2 和 3 的示例

参数 xaxs 和 yaxs 决定是否在 x 和/或 y 轴的两端放置 4%的轴范围的空间。可能的参数是“r”和“I”。值“r”是默认值,表示使用 4%的空间。值“I”表示没有空格。

在清单 3-23 中,给出了使用 xaxs 和 yaxs 的示例代码。

plot(
  pop75.ordered, pop15.ordered,
  main="xaxs = \"r\", yaxs = \"r\"",
  xaxs="r",
  yaxs="r"
)

plot(
  pop75.ordered, pop15.ordered,
  main="xaxs = \"i\", yaxs = \"i\"",
  xaxs="i",
  yaxs="i"
)

Listing 3-23Code for setting the edge space in a plot

在图 3-18 中,显示了来自清单 3-23 的图。

img/502384_1_En_3_Fig18_HTML.jpg

图 3-18

设置边缘有和没有空间的地块的示例

使用参数 axes、xaxt 和 yaxt 可以选择不使用轴记号和轴记号标签对绘图进行注释。自变量 axes 是一个长度为 1 的逻辑自变量,它告诉 R 是否包含轴。默认值为 TRUE–包括轴。

参数 xaxt 和 yaxt 对单个轴也是如此,但它们是长度为 1 的字符向量。将 xaxt 和/或 yaxt 设置为“s”、“l”或“t”会在 x 和/或 y 轴上绘制标准轴。将 xaxt 和/或 yaxt 设置为“n”会抑制轴记号和轴记号标签注释。

清单 3-24 给出了显示 xaxt 和 yaxt 效果的图的代码。

plot(
  pop75.ordered, pop15.ordered,
  main="xaxt = \"n\", yaxt = \"s\"",
  xaxt="n",
  yaxt="s"
)

Listing 3-24Code for the example of setting xaxt and yaxt

在图 3-19 中,给出了显示设置 xaxt 和 yaxt 的影响的曲线图。

img/502384_1_En_3_Fig19_HTML.jpg

图 3-19

使用 xaxt 抑制 x 轴上的轴刻度和轴刻度标签的示例

控制刻度间距有点棘手。设置间距的参数是 lab 来设置两个轴的间距,xaxp 和/或 yaxp 来分别设置轴的间距。然而,R 使用 las、xasp 和/或 yasp 给出的间距作为指导,但是选择可能遵循或可能不遵循该指导的“漂亮”间隔。设置 xlim 和/或 ylim 以及 lab、xaxp 和/或 yaxp 会有所帮助。

参数 lab 采用一个三元素整数向量。第一个元素设置 x 轴上的刻度数,第二个元素设置 y 轴上的刻度数,第三个元素没有使用。默认值为 c( 5,5,7)。在清单 3-25 中,给出了使用 las 的两个示例图的代码。

plot(
  pop75.ordered, pop15.ordered,
  main="lab = c( 10, 7, 7 )",
  lab=c( 10, 7, 7 )
)

plot(
  pop75.ordered, pop15.ordered,
  main="lab = c( 10, 7, 7 )\nxlim=c( 0.5, 5 ), ylim=c( 20, 50 )",
  lab=c( 10, 7, 7 ),
  xlim=c( 0.5, 5),
  ylim=c( 20, 50 )
)

Listing 3-25Examples of setting las with and without xlim and ylim

在图 3-20 中,清单 3-25 中的代码已经运行。

img/502384_1_En_3_Fig20_HTML.jpg

图 3-20

在设置 xlim 和 ylim 的情况下和不设置 xlim 的情况下对刻度间距使用 las 的示例

请注意,在第一个图中,x 轴上有 9 个刻度,y 轴上有 5 个刻度,尽管 las 要求 x 轴上有 10 个刻度,y 轴上有 7 个刻度。在第二个图中,x 轴上有 10 个刻度,y 轴上有 7 个刻度,由 las 设置。

要将刻度放在应该放置刻度的位置,从右(上)轴限制中减去左(下)轴限制,并将差值除以刻度间隔,然后将结果加 1。使用刻度数的结果值。在图 3-20 中,例如(5.0–0.5)/0.5+1 = 10 和(50–20)/5+1 = 7,所以 las 设置为等于 c( 10,7,7),其中第三个数可以是任意非负数。

参数 xaxp 和 yaxp 可用于独立设置每个轴的间距。两个参数都采用三元素数值向量。第一个元素是轴的下限,第二个元素是轴的上限,第三个数字是刻度间距的个数。再次,论点是一个指南,但 R 会选择一个“漂亮”的间距。

在清单 3-26 中,给出了使用 xaxp 和 yaxp 的示例代码。

plot(
  pop75.ordered, pop15.ordered,
  main="xaxp = c( 0.5, 5, 9 )\nyaxp = c( 20, 50, 6 )",
  xaxp=c( 0.5, 5, 9 ),
  yaxp=c( 20, 50, 6 )
)

plot(
  pop75.ordered, pop15.ordered,
  main="xaxp = c( 0.5, 5, 9 ), xlim = c( 0.5, 5 )\nyaxp = c( 20, 50, 6 ),
  ylim = c( 20, 50 )",
  xaxp=c( 0.5, 5, 9 ),
  yaxp=c( 20, 50, 6 ),
  xlim=c( 0.5, 5),
  ylim=c( 20, 50 )
)

Listing 3-26Code to demonstrate xaxp and yaxp with and without setting xlim and ylim

在图 3-21 中,生成了图形。

img/502384_1_En_3_Fig21_HTML.jpg

图 3-21

使用和不使用 xlim 和 ylim 设置 xaxp 和 yaxp 的示例

同样,第一个图中的空格不是 xaxp 和 yaxp 的空格;空间是第二个图中 xaxp 和 yaxp 的空间。请注意,空格数比刻度数少 1。

记号的长度和方向由参数 tck 和 tcl 设置。两个参数都采用长度为 1 的数字向量。

如果没有设置 tcl,参数 tck 给出刻度线的长度和方向。如果该值为正值,刻度线将绘制到绘图中;如果为负数,刻度线将远离绘图。如果 tck 设置为 1,则绘制网格线。

如果 tck 的绝对值大于 0.5 且小于或等于 1,则绘制在两个轴上的长度是 tck 的绝对值乘以垂直于刻度轴的轴的长度。如果 tck 介于-0.5 和 0.5 之间,则两个轴上的长度是 tck 的绝对值乘以较短轴的长度。tck 的值也可以大于 1,此时网格线延伸到图的边缘之外。tck 的默认值为 NA。

如果 tcl 被置位,那么 R 忽略 tck。一个刻度的长度是字符的行高的 tcl 倍。与 tck 一样,负值指向远离图的方向,正值指向图内。tcl 的默认值是-0.5。在 par()的帮助页面中,如果 tcl 设置为 NA,则 tck 设置为-0.01。

在清单 3-27 中,给出了设置 tck 和 tcl 的两个例子的代码。

plot(
  pop75.ordered, pop15.ordered,
  main="tck = 1",
  tck=1
)

plot(
  pop75.ordered, pop15.ordered,
  main="tck = NA, tcl=0.5",
  tck=NA,
  tcl=0.5
)

Listing 3-27Code to generate two plots with tck and tcl set

在图 3-22 中,运行清单 3-27 中两个地块的代码。

img/502384_1_En_3_Fig22_HTML.jpg

图 3-22

设置 tck 和 tcl 的示例

使用对数秤

有时,如果在一个或两个轴上使用对数标度,绘图会更清晰。对数刻度是指 x 或 y 值以 10 为底的对数中的轴刻度间距是线性的,而不是值的线性。但是,刻度线的标签以 x 或 y 值为单位。要设置对数刻度,使用参数 log。要注释比例尺,可以使用 xaxp 和 yaxp。与线性秤一样,xaxp 和 yaxp 只是指南。r 将创建“漂亮的”轴符号。

参数日志接受一个长度为 1 的字符向量作为值。可能的值是“x”,表示 x 轴上的对数刻度;“y”,表示 y 轴上的对数刻度;和“xy”或“yx ”,表示两个轴上的对数刻度。对于参数 xaxp 和 yaxp,轴上使用对数刻度的符号由 xaxp 和/或 yaxp 的第三个值控制。

可以使用三个值:1、2 或 3。根据 par()的帮助页面,xaxp 和/或 yaxp 的下限和上限必须是 10 的幂。在这种情况下,当 xaxp 和/或 yaxp 的第三个值设置为 1 时,只标注 10 的幂。对于 2,注释了 10 的 1 次和 5 次幂。对于 3、1、2 和 5 倍的 10 次方被注释。然而,在我的例子中,第一个图的 y 极限不等于 10 的幂;在我的设备上,R 很好地处理了这些限制。

来自生命周期储蓄数据集的变量 dpi(实际人均可支配收入)适用于对数标度的演示,并在清单 3-28 和图 3-23 中使用。用于创建图 3-23 中的图的代码见清单 3-28 。

img/502384_1_En_3_Fig23_HTML.jpg

图 3-23

使用 log、xaxp 和 yaxp 创建对数刻度的示例

dpi.ordered = LifeCycleSavings$dpi[ ord ]

plot(
  pop75.ordered, dpi.ordered,
  main="log = \"y\"\nyaxp = c( 50, 6000, 2 ), ylim=c( 50, 6000 )",
  log="y",
  yaxp=c( 50, 6000, 2 ),
  ylim=c( 50, 6000 )
)

plot(
  pop75.ordered, dpi.ordered,
  main="log = \"xy\", xaxp = c( 0.1, 10, 3 ), xlim= c( 0.1, 10)\nyaxp = c( 10, 10000, 2 ), ylim = c( 10, 10000 )",
  log="xy",
  xaxp=c( 0.1, 10, 3 ),
  yaxp=c( 10, 10000, 2 ),
  xlim=c( 0.1, 10 ),
  ylim=c( 10, 10000 )
)

Listing 3-28Code to create the variable dpi.ordered and plot the example plots for log, xaxp, and yaxp

在图 3-23 中,给出了示例中的图。

四、plot()的辅助函数

一旦 plot()运行(或当 plot()运行时), R 中有一些函数可用于添加到绘图中。这样的函数可以做一些事情,比如给散点图添加一条回归线,或者在一个点旁边放置文本。在这一章中,我们将介绍图形和统计软件包中的辅助函数。本章分为四个部分:整体外观、将对象分配到位置的函数、绘制线或线状对象的函数以及专用函数。

plot.default()有几个参数在第三章中没有涉及到——包括 panel.first 和 panel.last。将 panel.first 或 panel.last 设置为辅助函数分别在 plot()中 y 相对于 x 绘制之前或之后运行该函数。此外,可以在 plot()中设置的许多参数也可以在 plot()运行后在辅助函数中设置。

4.1 影响整体外观的函数

有七个函数影响一个图的整体外观:title(),用于标题和轴标签;axis(),用于设置单个轴;axTicks(),生成轴刻度线位置;box(),在地块周围放置边框;grid(),在绘图中设置网格;clip(),设置辅助函数输出的剪辑位置;和 rug(),将“rug”(单变量数据图)放在图的一侧。

调用 plot()后运行时,辅助函数将在 plot()调用中绘制的任何内容上绘制。对于轴标签,第二组标签绘制在第一组标签之上。两者都是可见的,结果通常是不可读的。在 ann 设置为 FALSE 的情况下运行 plot(),给出一个移除了标题和轴标签注释的图。

轴和轴记号注释也可以在对 plot()的调用中排除。在轴等于 FALSE 的情况下运行 plot()会给出一个移除了轴和轴刻度注释的图。

标题( )函数

title()函数可用于在绘图上放置标题、副标题以及 x 和 y 轴标签。该函数接受六个指定的参数,加上 par()中的许多参数。指定的参数是 main,用于绘图的标题;sub,为剧情的副标题;xlab,为 x 轴上的标签;ylab,为 y 轴上的标签;line,用于在 main、sub、xlab 和/或 ylab 中绘制文本的行;和 outer,用于确定是否在外部边距中打印文本。

在 plot()中使用的 main、sub、xlab 和 ylab 参数也可以在 title()中以同样的方式使用。通过另一种方法,对于 main、sub、xlab 和 ylab 中的每一个,参数可以被设置为等于最多四个元素的列表。列表中的第一个元素是要绘制的文本。其他参数是 font、col 和/或 cex。

字体。、列和 cex。*在 plot()中使用的参数也可以在 title()中使用。通过将参数 family 设置为字体系列名称,也可以在 title()中更改字体系列。对于所有这些,参数采用与 plot()中相同类型的值。

要调整文本在绘图侧的打印位置,可以使用参数 adj。(论点 adj 在 plot()中也起作用。)该参数是一个单元素数值向量,值介于 0 和 1 之间,包括 0 和 1。如果 adj 等于 0,则标题、副标题和 x 轴标签在 x 轴的开始处绘图;y 轴标签绘制在 y 轴的下起点。如果 adj 等于 1,则标题、副标题和 x 轴标签在 x 轴右端绘图;y 轴标签绘制在 y 轴的顶端。如果 adj 介于 0 和 1 之间,则元素在两个极端值之间按比例绘制。默认值为 0.5。

两个参数可用于控制标题和轴标签绘制在哪一行:line 和 mgp。在 R 中,线条从图的边缘开始排序,从零开始。默认情况下,在我的设备上,标题和轴标签以 1.7 行绘制,副标题以 2.7 行绘制。

参数行告诉 title()在哪一行绘制标题、副标题、xlab 和/或 ylab。line 的值可以是任何非负的数字向量,但是只使用第一个元素。如果在 title()中设置了 line,并且使用了副标题和 x 轴标签,则会出现问题,因为 x 轴标签和副标题会重叠。

以下是处理这个问题的几种方法。如果标题的默认位置是可接受的,那么参数 mgp 可以用来放置轴标签和副标题。参数 mgp 是 par()的一个参数,是一个包含非负元素的三元素数值向量。title()中只使用了第一个元素。(另外两个在 axis()中使用。)该值给出了轴标签所绘制的直线。然后,字幕绘制在相对于轴更极端的一行。mgp 的默认值是 c( 3,1,0)。

另一种方法是运行 title()两次,一次使用 line 绘制标题,一次使用 mgp 绘制标签和副标题。或者运行 title()三四次,每次设置一行,每次绘制一两个元素。

使用 par(),可以设置外部边距(参见第 6.2.1.1 节)。(默认情况下,外部边距在所有边上都是零行深。)如果设置了外部边距,title()有一个参数 outer–用于将标题和/或轴标签放在边距中。参数 outer 是一个单元素逻辑向量,默认情况下等于 FALSE。

有时数学表达式包含在标题或标签中。函数 expression()可以用来生成大量的数学表达式。(函数表达式()也可以用在 plot()中。)要查看表达式列表,请转到 plotmath 的帮助页面。

要在标题或轴标签中包含数学表达式,请将表达式()中的字符串粘贴在一起。比如:main = expression(paste(" An Integral:",integral( sin(x)*dx,-pi,pi)))。

在清单 4-1 中,给出了使用 title()的示例代码。

plot(
  pop75.ordered, pop15.ordered,
  ann=F
)

title(
  main=expression(
    paste(
      "Example of expression():",
      integral( sin(x)*dx, -pi, pi )
    )
  ),
  cex.main=1.5,
  font.main=4,
  col.main=gray( 0.3 ),
  line=2,
  adj=0
)

title(
  xlab=list(
    "population over 75",
    cex=1.2,
    font=4,
    col=gray( 0.7 )
  ),
  line=2.5,
  adj=0.5,
  family="serif"
)

title(
  ylab="population under 15"
)

title(
  sub=list(
    "bottom left",
    cex=1.3,
    font=1,
    col=gray( 0.5 )
  ),
  line=2.5,
  adj=0,
  family="mono"
)

title(
  sub=list(
    "bottom right",
    cex=1.3,
    font=1,
    col=gray( 0.5 )
  ),
  line=2.5,
  adj=1,
  family="sans"
)

Listing 4-1Code for an example of setting main, sub, xlab, ylab in repeated calls to title()

在图 4-1 中,显示了运行清单 4-1 中代码的结果。

img/502384_1_En_4_Fig1_HTML.jpg

图 4-1

使用对 title()的重复调用设置标题、x 轴标签、y 轴标签和两个字幕的示例

请注意,已经绘制了两个字幕,都在 x 轴标签的同一行上,但是通过设置 adj 向左和向右偏移。而且,在绘制标题的调用中,字体粗细被忽略,因为参数是一个表达式。x 轴上的字体系列从左到右各不相同,包括 mono、serif 和 sans。

在清单 4-2 中,给出了使用 line 和 mgp 的示例代码。

plot(
  pop75.ordered, pop15.ordered,
  ann=F,
  col.axis=gray( 0.7 )
)

title(
  main=list(
    "Example of mgp & line",
    font=4
  )
)

title( ylab = "line=0", line=0, adj=0 )
title( ylab = "line=1", line=1, adj=0 )
title( ylab = "line=2", line=2, adj=0 )
title( ylab = "line=3", line=3, adj=0 )

title( sub = "subtitle", xlab = "mgp[1]=0", mgp=c( 0, 1, 0 ), adj=.22 )
title( sub = "subtitle", xlab = "mgp[1]=1", mgp=c( 1, 1, 0 ), adj=0.5 )
title( sub = "subtitle", xlab = "mgp[1]=2", mgp=c( 2, 1, 0 ), adj=0.78 )
title( sub = "subtitle", xlab = "mgp[1]=3", mgp=c( 3, 1, 0 ), adj=0.97 )

Listing 4-2Code demonstrating line spacing using line and mgp

在图 4-2 中,代码已经运行。

img/502384_1_En_4_Fig2_HTML.jpg

图 4-2

使用直线和 mgp[1]进行直线放置

请注意,这些线与预期的一样,不在图中。此外,副标题位于 x 轴标签下方。

4 . 1 . 2 axis()和 axTicks()函数

通过在轴设置为 FALSE 的情况下运行 plot(),并使用函数 axis()和可选的 axTicks()来创建轴,可以将轴单独放在图上。在 axis()的帮助页面中,该函数接受 16 个指定的参数以及来自 par()的附加参数。

4.1.2.1 轴( )函数

axis()的前八个参数是 side 表示要放置轴的一侧,at 表示轴上要放置刻度线的位置,labels 表示要放置刻度线的标签,tick 表示是否绘制轴和刻度线,line 表示要放置轴的远离绘图的行数,pos 表示要放置轴的轴上垂直于要绘制的轴的位置,outer 表示在外部边距中绘制轴,font 表示轴刻度线标签的字体粗细。

副参数采用四个整数值之一:1、2、3 或 4。对应的边是底部、左侧、顶部和右侧。side 没有默认值。

at 参数是一个数值向量,它告诉 R 在哪里放置刻度线。缺省值是 NULL——也就是说,R 根据 par()中 xaxp 或 yaxp(取决于边)的值决定在哪里放置刻度线。at 的值可以延伸到绘图界限之外。默认情况下,如果刻度线在绘图范围内,R 将只绘制刻度线。但是,如果 xpd 设置为 TRUE 或 NA,将绘制轴的完整范围,分别在绘制区域边缘或设备区域边缘有一个限制。

如果 labels 的值不是逻辑模式,则该值的长度必须与 at 相同,并且是一个向量,其元素的模式为数字、复杂、原始或字符。参数可以是一个列表。如果标签元素设置为非限定值(NA、Inf、-Inf 或 NaN),则不会为该元素绘制标签。labels 的默认值为 TRUE——也就是说,R 创建了“漂亮”的数字标签。如果设置为 FALSE,则不绘制标签。

tick 参数是长度为 1 的逻辑向量。如果设置为 TRUE(默认值),则绘制轴和刻度。如果设置为 FALSE,则不绘制轴和记号。

line、mgp[3]和 pos 参数都告诉 R 在哪里放置轴。如果设置了 pos,则忽略 line 和 mgp[3]。如果 pos 为 NA 且 line 被置位,则 mgp[3]被忽略。如果 line 和 pos 都是 NA,并且 mgp[3]的值是默认值 0,则坐标轴绘制在线 0 处。pos 的默认值是 NA,line 的默认值是 NA,mgp[3]的默认值是 par()中的值,默认为 0。

参数 line 或 mgp3 是一个单值数值向量,以远离绘图的线为单位进行测量。论点可以是否定的。参数 pos 也是一个单值数值向量,对于边 1 和 3(水平边),它给出了绘制轴的 y 坐标。对于边 2 和 4(垂直边),pos 给出了绘制轴的 x 坐标。

参数 outer 指示是否将轴放在外部边距中。参数是长度为 1 的逻辑向量,默认情况下为 FALSE。

参数 font 是轴刻度标签的字体粗细。字体可以采用所用字体系列允许的字体值。缺省值是 NA,它使用 par()中 font 的值——在我的设备上缺省值是 1。

参见清单 4-3 中侧边、at、标签和位置的示例代码。

plot(
  pop75.ordered, pop15.ordered,
  axes=FALSE
)

title(
  main="Example of side, at, labels, pos, & xpd",
  font.main=1,
  line=3
)

axis(
  1,
  at=c( .25, 1, 2, 3, 4, 5 ),
  labels=c(NA, 1:4, NA),
  pos=20,
  xpd=TRUE
)

axis(
 2,
  at=c( 20, 30, 40, 50 ),
  labels=c( NA, 30, 40, NA ),
  pos=0.25,
  xpd=TRUE
)

axis(
  3,
  at=c( 0.25, 1, 2, 3, 4, 5 ),
  labels=FALSE,
  pos=50,
  xpd=TRUE
)

axis(
  4,
  at=c( 20, 30, 40, 50 ),
  labels=FALSE,
  pos=5,
  xpd=TRUE
)

Listing 4-3Code for the example of side, at, labels, and pos – using xpd

在图 4-3 中,运行清单 4-3 中的代码。

img/502384_1_En_4_Fig3_HTML.jpg

图 4-3

使用 side、at、labels、pos 和 xpd 的示例

请注意,轴是手动创建的。手动指定轴记号标签名称,以及轴开始和停止的位置。刻度线设置在特定位置,轴可以在绘图区域外绘图。

接下来的八个参数是用于轴和轴刻度线的线型的 lty,用于轴的线宽的 lwd,用于轴刻度线的线宽的 lwd.ticks,用于轴的颜色的 col,用于轴刻度线的颜色的 col.ticks,用于在平行于标签读取方向的方向上调整轴刻度标签位置的 hadj, padj 在垂直于标签读取方向的方向上调整轴刻度标签位置,gap.axis 在刻度标签过于靠近下一个刻度标签时停止绘图。

当在 plot()中使用时,参数 lty 采用相同的值。默认值为“固体”。

在 plot()中使用时,参数 lwd 和 lwd.ticks 的值与 lwd 相同。将 lwd 和/或 lwd.ticks 设置为小于或等于 0 的值将抑制直线和/或记号。lwd 的默认值为 1,lwd.ticks 的默认值为 lwd。

当在 plot()中使用 col 时,参数 col 和 col.ticks 采用与 col 相同的值。col 和 col.ticks 的默认值为 NULL,这告诉 R 使用与 par()中 fg 的值相关联的颜色——在我的设备上默认为黑色。

参数 hadj 是一个单值数值向量,取值范围为 0 到 1(包括 0 和 1 ),或者取一个非有限值(n a、Inf、-Inf 或 NaN)。值为 0 时,hadj 将轴刻度标签放在右边——在阅读方向上。值 1 将标签放在阅读方向的左侧。hadj 的默认值是 NA。如果读取方向平行于轴,NA 值或任何非限定值将标签置于刻度线的中心。如果阅读方向垂直于轴,则轴刻度标签与轴相邻的一侧对齐。

参数 padj 是一个数值向量,其长度可以大于或等于 1。如果向量短于标签的数量,则参数采用 0 和 1 之间的值(包括 0 和 1)或无限值并循环。如果参数 padj 为 0,R 会将轴刻度标签放在标签所能到达的最远位置——朝阅读方向看。值为 1 会将标签尽可能向下放置,即朝阅读方向看。padj 的默认值是 NA——这意味着 padj 采用 par()(在我的设备上为 0)中参数 las 的默认值——就像 padj 对任何非限定值所做的那样。

最后一个参数 gap.axis 采用单值数值向量,可以是负数。根据 axis()的帮助页面,将“m”的字符大小乘以 gap.axis 来确定标签之间的最小可接受间隙。如果为负值,则允许标签重叠的大小为“m”乘以 gap.axis 值的负值。默认值为 NA,对于平行于轴的轴刻度线标签,将“m”的大小乘以 1,对于垂直于轴的轴刻度线标签,将“m”的大小乘以 0.25。

本页信息来自 r 中 axis()的帮助页。有关设置 lty、lwd、lwd.ticks、col、col.ticks、side 和 font 的示例代码,请参见清单 4-4 。

plot(
  pop75.ordered, pop15.ordered,
  axes=FALSE,
  xlab=""
)

title(
  "Example of lty, lwd, lwd.ticks, col, col.ticks, & font",
  font.main=1
)

axis(
  1,
  at=c( .25, 1, 2, 3, 4, 5 ),
  labels=c(
    rep(
      "mmmmmmmmmm",
      6
    )
  ),
  hadj=0.3,
  padj=( 1:6 )/7,
  gap.axis=-1,
  line=3
)

axis(
  1,
  at=c( .25, 1, 2, 3, 4, 5 ),
  labels=c(
    rep(
      "mmmmmmmmmm",
      6
    )
  ),
  hadj=0.3,
  padj=( 1:6 )/7,
  gap.axis=-2
)

axis(
  2,
  at=c( 20, 30, 40, 50 ),
  labels=c( 20, 30, 40, 50 ),
  lty="dashed",
  lwd=3,
  lwd.ticks=4,
  col=gray( 0.8 ),
  col.ticks=gray( 0.6 ),
  col.axis=gray( 0.6 ),
  font=2
)

Listing 4-4Code for the example of lty, lwd, lwd.ticks, col, col.ticks, side, and font in axis()

在图 4-4 中,运行清单 4-4 中的代码。

img/502384_1_En_4_Fig4_HTML.jpg

图 4-4

在 axis()中使用 lty、lwd、lwd.ticks、col、col.ticks 和 font 的示例

注意,在对 axis 的第一次调用中(第 1 面第 3 行),gap.axis 等于-1,因此允许一个“m”的重叠,并且只绘制了两个标签。在第二次调用中(第 1 面第 0 行),gap.axis 等于-2,因此允许两个“m”重叠,并且所有四个标签都绘制出来。padj 的值也从左向右增加。

在第三次调用 axis 时(在第 2 面),axis 的线型已被更改。此外,轴和轴刻度线的线宽和颜色也已更改。参数 col.axis 用于更改轴刻度标签的颜色。类似地,也可以设置 cex.axis。

4.1.2.2 轴柄( )函数

axTicks()函数生成轴刻度,并可用作 axis()中 at 的参数。对于对数刻度,必须调用包含带有对数刻度的边的 plot()来设置刻度。

该函数有五个参数:side 表示绘制轴的一侧,axp 表示设置轴极值的位置和轴刻度之间的间隔数的轴刻度指南(),usr 表示以用户坐标为单位的轴限制,log 表示使用对数刻度,nintLog 表示使用对数刻度时对数刻度的轴刻度间隔数的下限–这只是 r 的指南。此信息来自轴刻度的帮助页()。

参数端是一个单元素整数向量,与 axis()中的相同。该参数没有默认值。

参数 axp 是一个三元素数值向量,对于边等于 1 或 3 的情况,其行为类似于 plot()中的 xaxp,对于边 2 和 4 的情况,其行为类似于 plot()中的 yaxp。axp 的三个值给出了刻度线位置的下限和上限以及刻度线之间的间隔数(和只是对 axTicks()的指导)。

axp 的缺省值是 NULL——对于这种情况,axTicks()使用的值是 par()中 xaxp 或 yaxp 的值,具体取决于哪一方。

参数 usr 是一个两元素的数值向量,它给出了轴的极限位置。如果 log 为真,那么 usr 的单位是 10 的幂。参数 axp 和参数 usr 在一起使用时会发生奇怪的事情,因此应该使用其中的一个。usr 的默认值为 NULL,在这种情况下,usr 被设置为等于 par()中 x 轴的 usr[1:2]或 y 轴的 usr[3:4]的值。

自变量 log 是一个单元素逻辑向量,表示轴的对数刻度。仅当在图()中为图的给定侧设置了对数刻度时,该参数才应设置为 TRUE。缺省值为 NULL,在这种情况下 log 被设置为等于 par()中 xlog 或 ylog 的值,这取决于绘制的是哪一侧。

参数 nintLog 是对数刻度的最小间隔数,根据 axTicks()的帮助页,仅当 Log 为 TRUE 时才有效。默认值为 NULL,对于该值,参数采用 par()中 lab 的第一个或第二个元素的值——取决于边是 1、3、2 还是 4。这个论点似乎没有效果。

在清单 4-5 中,给出了一些运行 axTicks()的例子。

>  #open an empty plotting window (with no x and(or) y).

> plot.new()

> axTicks(
2,
axp=c( 20, 50, 6 )
)
[1] 20 25 30 35 40 45 50

> axTicks(
2,
usr=c( 20, 50 )
)
[1] 0.0 0.2 0.4 0.6 0.8 1.0

> axTicks(
2,
axp=c( 20, 50, 6 ),
usr=c( 20, 50 )
)
[1] 20 25 30 35 40 45 50

> axTicks(
2,
axp=c( 20, 5000, 3 ),
log=TRUE,
nintLog=8
)
[1]  4 10

> axTicks(
2,
usr=c( 0.6, 3.8 ),
log=TRUE,
nintLog=8
)
Error in axTicks(2, usr = c(0.6, 3.8), log = TRUE, nintLog = 8) :
  invalid positive 'axp[3]'

> axTicks(
2,
axp=c( 20, 5000, 3 ),
usr=c( 0.6, 3.8 ),
log=TRUE,
nintLog=8
)
 [1]    4   10   20   40  100  200  400 1000 2000 4000

> # open a plotting window with a log scale on the y axis

> plot(
pop75.ordered, dpi.ordered,
axes=FALSE,
log="y"
)

> # the y axis

> 10^c( 0.6, 3.8 )
[1]    3.981072 6309.573445

> axTicks(
2
)
[1]  100  200  500 1000 2000

> axTicks(
2,
axp=c( 20, 5000, 3 ),
log=TRUE,
nintLog=8
)
[1]   20   40  100  200  400 1000 2000 4000

> axTicks(
2,
usr=c( 0.6, 3.8 ),
log=TRUE,
nintLog=8
)
[1]   20   50  100  200  500 1000 2000 5000

> axTicks(
2,
axp=c( 20, 5000, 3 ),
usr=c( 0.6, 3.8 ),
log=TRUE,
nintLog=8
)
 [1]    4   10   20   40  100  200  400 1000 2000 4000

> # the x axis

> axTicks(
1
)
[1] 1 2 3 4

> axTicks(
1,
axp=c( 0, 5, 5 )
)
[1] 0 1 2 3 4 5

> axTicks(
1,
usr=c( 0, 5 )
)
[1] 1 2 3 4

> axTicks(
1,
axp=c( 0, 5, 5 ),
usr=c( 0, 5 )
)
[1] 0 1 2 3 4 5

Listing 4-5Examples of using axp, usr, log, and nintLog in axTicks()

请注意,如果尚未运行绘图,axp 会给出正确的值,但 usr 会假设一个单位长度轴。此外,如果没有绘制对数标度,使用对数等于真会产生不稳定的结果。

4 . 1 . 3 box()、grid()、clip()和 rug()函数

box()、grid()、clip()和 rug()函数会影响绘图的整体外观。颜色、线条样式和线条宽度方面的灵活性可以使图形更容易阅读。

4.1.3.1 盒子( )函数

函数的作用是:在图的周围放一个方框。该函数接受两个参数,以及 par()的一些参数。

第一个论点是哪个。该参数有四个可能的值:“绘图”、“人物”、“内部”和“外部”。值“plot”会在绘图周围放置一个框。对于没有外部边界的单一绘图,“图形”、“内部”和“外部”都给出相同的结果-在图形的外部放置一个方框。

对于图形中的多个图,且没有外部边界,使用“图形”会在最后绘制的图形周围放置一个方框。值“内部”和“外部”都在整个图形周围放置了一个框。如果有外边界,“内”会在该组图形周围和外边界内放置一个框,“外”会框住外边界。其缺省值是“绘图”。

第二个参数是线类型的 lty。该参数与 plot()中的参数 lty 采用相同的值。lty 的默认值是“固体”。

根据 box()的帮助页面,如果 col 不是 NA,则 box 的颜色由 col 设置。如果 col 是 NA,fg 不是 NA,则颜色由 fg 的值给出。如果 col 和 fg 都是 NA,则框的颜色由 par()中 col 的值给出——在我的设备上默认为“黑色”。

在清单中,4-6 是使用 box()的示例代码。

plot(
  pop75.ordered, dpi.ordered,
  axes=FALSE,
  log="y"
)

title(
  main="Example of which, lty, col, & lwd in box()",
  font.main=1
)

box(
  which="plot",
   lty="dashed",
  col=gray( 0.8 ),
  lwd=2
)

box(
  which="figure",
  lty="longdash",
  col=gray( 0.2 ),
  lwd=2
)

Listing 4-6Code demonstrating which, lty, col, and lwd in box()

在图 4-5 中,运行清单 4-6 中的代码。

img/502384_1_En_4_Fig5_HTML.jpg

图 4-5

在 box()中使用 which、lty、col 和 lwd 的示例

注意外盒是深灰色,内盒是浅灰色。此外,外盒使用长破折号,而内盒使用破折号。外盒在图的周围。内框在剧情周围。对于这两个框,线宽都是 2。

4.1.3.2 网格( )函数

grid()函数有六个参数——不能使用 par()中的参数。前两个参数是 nx 和 ny,代表水平和垂直维度上的单元格数量。nx 的默认值为 NULL,ny 的默认值为 nx 的值。如果 nx 或 ny 设置为等于 NULL,R 将绘制 x 或 y 维的网格线,如果使用 axTicks()中的默认值,刻度线将位于此处。如果设置为 NA,则不绘制 x 轴或 y 轴的网格。

第三个参数是代表网格颜色的 col,默认值等于“浅灰色”;第四个参数是线条类型的 lty,默认值为“dotted”。第五个参数是 lwd,表示线的宽度。lwd 的默认值是 lwd 在 par()中的值。所有这三个参数都使用 plot()中指定的相同值,并且可以是多元向量。争论循环往复。

第六个参数是等对数——一个单元素逻辑向量,它告诉 R 如果轴上的刻度是对数刻度,例如 1、10、100 和 1000,是否绘制等距网格。如果 nx 或 ny 是对数刻度并且 equilogs 设置为 FALSE,则在轴上的每个刻度处绘制一条网格线。equilogs 的默认值为 TRUE。在 grid()的帮助页面中,仅当 x 或 y 上的比例为对数比例,并且相应的 n x 或 ny 值为空时,该参数才会影响绘图。

plot(
  pop75.ordered, dpi.ordered,
  log="y",
  cex=2,
  panel.first=grid(
    col=gray(
      ( 0:4 )/5
    ),
    lty=1:5,
    lwd=( 2:6 ),
    equilogs=FALSE
  )
)

title(
  main="Example of col, lty, lwd, and equilogs in grid()"
)

Listing 4-7Code for an example of setting col, lty, lwd, and equilogs in grid()

列表 4-7 生成的图如图 4-6 所示。

img/502384_1_En_4_Fig6_HTML.jpg

图 4-6

在 grid()中使用 col、lty、lwd 和 equilogs 的示例

请注意,grid()是在 plot()中使用 panel.first 运行的,因此网格是在点之前绘制的。因此,这些点会覆盖在网格上。如果首先绘制点,网格将覆盖这些点。此外,线条样式、线条宽度和线条颜色会随着 x 和 y 值的增加而改变。

4.1.3.3 剪辑( )函数

clip()函数设置剪辑区域——辅助函数在其中绘图的区域。对于剪辑区域的角,该函数采用四个参数 x1、x2、y1 和 y2。参数以 x 轴和 y 轴上的单位度量。

根据 clip()的帮助页面,线、矩形和多边形是在内部处理的,但文本的处理是由显示图形的设备完成的,因此可能不会像预期的那样运行。当新的绘图完成或参数 xpd 改变时,剪辑区域被重置。

在清单 4-8 中,给出了使用 clip()的示例代码。

red = seq( 1, 50, 4.3 )[ -5 ]
plot(
  pop75.ordered, pop15.ordered,
  type="n",
  main="Example of using clip()"
)

clip(
  -0.5, 6, 19, 52
)

text(
  pop75.ordered[ red ], pop15.ordered[ red ],

  row.names(
    LifeCycleSavings
  )[ ord ] [ red ],
  cex=.7
)

Listing 4-8Code for the example of using clip()

在图 4-7 中,运行清单 4-8 中的代码。

img/502384_1_En_4_Fig7_HTML.jpg

图 4-7

使用 clip()的示例

请注意,文本已被允许在绘图区域之外打印。还可以在绘图区域内使用裁剪来设置不同的颜色(请参见 clip()的帮助页面上给出的示例)。

地毯 4.1.3.4()函数

函数的作用是:沿着图的一边绘制一个一维图。垂直于点所在的边绘制线条,所有线条的高度相同。

rug()的参数是 x,表示要绘制的数据向量;ticksize,代表线的长度;side,用于绘制地毯的一侧;lwd,代表线条的宽度;col,代表线条的颜色;quiet,用于告诉 R 当数据超出轴的范围时是否打印警告;以及 axis()的一些参数——比如 line 和 pos。这些信息来自 rug()的帮助页面。

参数 x 取任意长度的数值向量。x 没有默认值。

参数 ticksize 采用一个元素的数值向量。默认值为 0.03。负的刻度大小远离侧边而不是进入图中。

参数端接受一个单元素整数向量,其值可以是 1、2、3 和 4,分别代表底部、左侧、顶部和右侧。默认值为 1。

参数 lwd 和 col 是 par()的标准参数。两个参数都可以将多元向量作为值,但只使用第一个元素。随钻测井的默认值等于 0.5;col 的默认值是 par()中 fg 的值。

参数 quiet 可以取值 TRUE 或 FALSE。如果 R 选项“warn”小于 0,则默认值为 TRUE,否则为 FALSE。在 R 提示符下运行 get option(“warn”)以查看“warn”的值——在我的设备上该值为 0,因此 quiet 为 FALSE。

在清单 4-9 中,给出了在 rug()中使用 ticksize、side、col、lwd 和 line 的示例代码。

plot(
  pop75.ordered,
  dpi.ordered,
  log="y",
  main="Example of x, ticksize, side, lwd, and col in rug()"
)

rug(
  pop75.ordered,
  ticksize = 0.03,
  side = 1,
  lwd=1,
  line=2.5,
  col=gray( 0.4 )
)

rug(
  dpi.ordered,
  ticksize = -0.04,
  side = 4,
  lwd=1,
  col=gray( 0.2 )
)

Listing 4-9Code for an example of using x, ticksize, side, col, lwd, and line in rug()

在图 4-8 中,运行清单 4-9 中的代码。

img/502384_1_En_4_Fig8_HTML.jpg

图 4-8

地毯中 x、ticksize、side、col、lwd 和 line 的示例()

请注意,第 1 面上的地毯位于安讯士标签和安讯士刻度标签之间。参数 line 设置为 2.5,参数 ticksize 为正。对于第 4 面,ticksize 为负,且未设置线。

4.2 点定义的函数

在这一节中,我们将介绍 stats 和 graphics 包中通过点位置绘制对象的辅助函数。描述了 points()、text()、symbols()、image()和 rasterImage()函数。

4.2.1 积分( )函数

我们看的第一个函数是 points()。该函数采用与第 3.3 节中 plot.default()的绘图参数相同的参数。一些参数是 x,y,type,pch,col,bg,cex 和 lwd。有关更多信息,请参见第 3.3 节或点的帮助页面()。

在清单 4-10 中,给出了使用 points()的示例代码。

tri1 = quantile( dpi.ordered, 0.33)
tri2 = quantile( dpi.ordered, 0.67)

plot(
  pop75.ordered, dpi.ordered,
  log="xy",
  main="Example of points()",
  font.main=1,
  type="n"
)

points(
  pop75.ordered, dpi.ordered,
  pch=ifelse(
    dpi.ordered<=tri2,
    ifelse(
      dpi.ordered<=tri1,
      "L",
      "M"
    ),
    "H"
  ),
  cex=0.7
)

Listing 4-10Code for an example of using points() to annotate the data with the income tercile: low, middle, and high terciles of income

在图 4-9 中,运行清单 4-10 中的代码。

img/502384_1_En_4_Fig9_HTML.jpg

图 4-9

使用点注释图中点的示例,用字母表示 y 变量所在的区域

请注意,使用 L、M 和 H 的值允许用户查看 75 岁以上人口百分比值按收入区间的分布。R 函数 quantile()用于查找术语。

text()函数

text()函数与 points()类似,它将字符串放在不同的位置,但是字符串中可以有多个字符。text()的参数是 x 和 y,表示点的位置;标签,用于在点上打印的字符串;adj,用于调整围绕该点的圆圈中标签的位置;pos,将标签放置在该点周围的四个位置;偏移量,用于 pos 使用的偏移量;vfont,使用 Hershey 字体系列和标签的粗细;以及标准的 cex、col 和 font。

x 参数没有默认值,它是一个可以强制转换为数值的向量值。y 参数的默认值为 NULL,即 x 变为 y,索引变量变为 x。如果给定 y,y 不一定与 x 的长度相同,y 将循环,但 y 必须是可以强制为数字的向量。

labels 参数是一个字符向量(或可以强制为字符的向量),包含分配给索引和 x(或 x 和 y)位置的标签。labels 参数不一定与 x 和 cycles 的长度相同。根据 text()上的帮助页面,如果 labels 长于 x,那么 x(如果使用 y,则 y)将循环,直到 labels 到达 labels 的最后一个元素。labels 的缺省值是 seq_along( x$x),它给出了一个从 1 到 x 长度的数字序列。

adj 参数采用长度为 1 或 2 的数字向量。值为 0 告诉 R 将标签放置在点的右侧。值 0.5 以点为中心绘制标签。值为 1 时,R 在点的左侧绘制标签。标签在垂直方向居中。

对于长度为 2 的向量,第二个值告诉 R 在垂直方向的何处绘制字符串;值为 1 表示 R 在点的正下方绘制,值为 0.5 表示在点的标高处绘制,值为 0 表示在点的正上方绘制。

对于大多数设备,adj 的任何值都可以,但不是所有设备都能够为 0 到 1 之间的值绘制文本。负值可以在大多数设备上使用。

对于 adj,字符串和点之间的距离取决于字符串的大小。adj 的缺省值是 NULL–它使文本在水平和垂直方向上居中。

pos 参数也定位标签。参数可以取值为 1、2、3 和 4,分别表示点的下方、左侧、上方和右侧。offset 参数与 pos 一起使用,给出了从标注绘制点的距离。

pos 和 offset 的默认值为 NULL 和 0.5。如果设置了 pos,则忽略 adj 的值。

par()中影响 text()中字符串打印的一个参数是 srt,用于旋转字符串。该参数采用一个单元素数值向量,并按参数值旋转字符串,其中该值以从 0(平行于 x 轴)开始的旋转度数为单位。str 的默认值是 par()中 string 的值,在我的设备上是 0。

par()中另一个影响行高的参数是 lheight。该参数增加或减少多行字符串的行间距。根据 par()的帮助页面,lheight 的值乘以 cex 的值得到一个新的行高。lheight 的默认值是 1。该参数仅在 text()和函数 strheight()中使用。

在清单 4-11 中,给出了使用 adj、pos、offset 和 srt 的示例代码。

plot(
  pop75.ordered, pop15.ordered,
  main="Example of adj, pos, offset, srt in text()",
  font.main=1,
   xlim=c( 1, 1.8 ),
  ylim=c( 39, 45.5 ),
  col=grey( 0.4 )
)

# adj

text(
  pop75.ordered[16], pop15.ordered[16],
  labels="(1,0)",
  adj=c( 1, 0 ),
  cex=0.7
)
text(
  pop75.ordered[16], pop15.ordered[16],
  labels="(0,0)",
  adj=c( 0, 0 ),
  cex=0.7
)
text(
  pop75.ordered[16], pop15.ordered[16],
  labels="(0,1)",
  adj=c( 0, 1 ),
  cex=0.7
)
text(
  pop75.ordered[16], pop15.ordered[16],
  labels="(1,1)",
  adj=c( 1, 1 ),
  cex=0.7
)
text(
  pop75.ordered[17], pop15.ordered[17],
  labels="(1.5,-0.5)",
  adj=c( 1.5, -0.5 ),
  cex=0.7
)
text(
  pop75.ordered[17], pop15.ordered[17],
  labels="(-0.5,-0.5)",
  adj=c( -0.5, -0.5 ),
  cex=0.7
)
text(
  pop75.ordered[17], pop15.ordered[17],
  labels="(-0.5,1.5)",
  adj=c( -0.5, 1.5 ),
  cex=0.7
)
text(
  pop75.ordered[17], pop15.ordered[17],
  labels="(1.5,1.5)",
  adj=c( 1.5, 1.5 ),
  cex=0.7
)

# pos

text(
  pop75.ordered[22], pop15.ordered[22],
  labels="pos=1",
  pos=1,
  cex=0.7
)
text(
  pop75.ordered[22], pop15.ordered[22],
  labels="pos=2",
  pos=2,
  cex=0.7
)
text(
  pop75.ordered[22], pop15.ordered[22],
  labels="pos=3",
  pos=3,
  cex=0.7
)
text(
  pop75.ordered[22], pop15.ordered[22],
  labels="pos=4",
  pos=4,
  cex=0.7
)

# pos and offset

text(
  pop75.ordered[20], pop15.ordered[20],
  labels="pos=1 offset=1",
  pos=1,
  offset=1,
  cex=0.7
)
text(
  pop75.ordered[20], pop15.ordered[20],
  labels="pos=2 offset=1",
  pos=2,
  offset=1,
  cex=0.7
)
text(
  pop75.ordered[20], pop15.ordered[20],
  labels="pos=3 offset=1",
  pos=3,
  offset=1,
  cex=0.7
)
text(
  pop75.ordered[20], pop15.ordered[20],
  labels="pos=4 offset=1",
  pos=4,
  offset=1,
  cex=0.7
)

#  str

text(
  pop75.ordered[10], pop15.ordered[10],
  labels="srt=45",
  srt=45,
  cex=0.7
)

Listing 4-11The

code for the example of using adj, pos, offset, and srt in text()

在图 4-10 中,运行清单 4-11 中的代码。

img/502384_1_En_4_Fig10_HTML.jpg

图 4-10

在 text()中设置 adj、pos、offset 和 srt 的示例

vfont 参数允许 text()使用 Hershey 字体系列和字体粗细。该参数采用两个元素的字符向量或 NULL 值。第一个元素是字体的系列,第二个元素是字体的粗细——例如,vfont=c( "serif "," plain ")。(字体系列和字体粗细的名称列在通过运行 demo(“Hershey”)生成的 pdf 的第一个 pdf 上)。)如果没有设置 vfont,如果在 text()中没有指定字体系列和字体,则字体系列和字体粗细是 par()中的字体系列和字体粗细。vfont 的默认值为 NULL。

参数 cex 设置字符的大小,并接受一个正数向量。在 text()中,R 将 par()中的 cex 值乘以 text()中的 cex 值,得到设备默认字符大小的乘数。text()中 cex 的默认值是 1。

参数 col 和 font(以及 family)的值与 plot()中的值相同,默认情况下,它们的值来自 par()。cex、col 和 font 都可以有多个元素,并且值是循环的。

在清单 4-12 中,给出了在 text()中使用 cex、col、font 和 lheight 的示例代码。

plot(
  pop75.ordered, pop15.ordered,
  main="Example of cex, col, font, & lheight in text()",
  font.main=1,
  xlim=c( 1, 1.8 ),
  ylim=c( 39, 45.5 )
)

text(
  pop75.ordered[ 10:23 ], pop15.ordered[ 10:23 ],
  labels="pos=2\nlheight=1.2",
  pos=2,
  lheight=1.2,
  cex=3:17/15,
  col=grey( 6:19/25 ),
  font=c( 1, 3 )
)

Listing 4-12The code to demonstrate using cex, col, font, and lheight in text()

在图 4-11 中,运行清单 4-12 中的代码。

img/502384_1_En_4_Fig11_HTML.jpg

图 4-11

在 text()中使用 cex、col、font 和 lheight 的示例

在清单 4-13 中,给出了使用 pos 小心地在点上放置标签的代码,以便标签不会重叠。

nms =c( 4, 3, 1, 4, 4, 1, 3, 4, 2, 1, 3, 1, 1, 4, 3, rep( 4, 35 ) )

plot(
  pop75.ordered, pop15.ordered,
  main="Example of cleaning up label overlaps in text()",
  font.main=1,
  cex=0.3,
  xlim=c( 0.5, 2.2 ),
  ylim=c( 39, 48.5 )
)

text(
  pop75.ordered, pop15.ordered,
  row.names(
    LifeCycleSavings[ ord, ]
  ),
  cex=0.6,
  pos=nms,
  offset=0.3
)

Listing 4-13An example of carefully using pos to move text so that labels do not overlie

在图 4-12 中,运行清单 4-13 中的代码。

img/502384_1_En_4_Fig12_HTML.jpg

图 4-12

使用 pos in text()清除覆盖标签的示例

注意,向量 nms 包含 50 个元素,每个元素为 50 个标签中的每一个分配一个值。还要注意,并非所有的数据点都在图的 x 和 y 界限内,不在界限内的数据点不会被绘制出来。

符号( )函数

symbols()函数在绘图上的特定点绘制形状。可以绘制的形状有圆形、正方形、矩形、星形、温度计和箱线图。与文本()和点()不同,函数符号()既是一个独立的函数,也是一个可用作绘图()辅助函数的函数。在这一章中,我们把符号()看作一个辅助函数。

符号()的参数是 x 和 y,表示点的位置;圈子,要图谋圈子;方块,要画方块;矩形,绘制矩形;明星,要剧情明星;温度计,绘制一级或二级温度计;箱线图,绘制箱线图;英寸,代表形状的大小;添加,以确定该图是否独立;fg,对于像外形轮廓这样的颜色;bg,用于填充形状背景的颜色;而且,如果 symbols 被用作一个独立的函数,许多相同的参数在 plot()中使用。参数 x 和 y 或者是两个长度相同的数值向量,或者是 x 设置为数值向量,y 设置为空。x 没有默认值,y 的默认值为 NULL。

circles 参数采用一个长度等于 x 长度的数值向量。然后,绘制的圆的半径根据参数的值进行缩放。实际大小取决于参数英寸的值。

squares 参数也采用一个长度等于 x 长度的数值向量。绘制的正方形的边长根据参数值进行缩放。同样,实际大小取决于参数英寸的值。

rectangles 参数采用一个行数等于 x 的长度、有两列的数值矩阵。第一列给出了矩形的宽度,第二列给出了矩形的高度——实际尺寸取决于英寸值。

stars 参数采用一个行数等于 x 长度且至少有三列的数字矩阵。星形图连接位置-矩阵中的每一列有一个位置。这些位置距离 x-y 点有一定距离。实际距离取决于英寸值。对于设置为 NA 的值,到该点的距离设置为零,这可用于绘制不同距离的尖峰。

温度计参数采用一个数字矩阵,其行数等于 x 的长度,有三列或四列。第一列给出了温度计的宽度。第二列给出了高度。第三列(和第四列,如果使用的话)的值应该在 0 和 1 之间,包括 0 和 1。该函数根据第三(和第四)列中的比例,在温度计上按比例绘制一条线(如果使用第四列,则绘制两条线)。温度计的实际尺寸取决于英寸值。

boxplots 参数采用一个行数等于 x 长度、有五列的数值矩阵。第一列给出了盒子的宽度。第二列给出了盒子的高度。第三和第四列分别给出了下部和上部胡须的长度。第五列给出了绘制中值的框上方的比例距离,应该在 0 和 1 之间,包括 0 和 1。箱线图的实际大小取决于英寸值。

圆形、正方形、矩形、星形、温度计和箱线图参数没有默认值。如果其中一个参数的元素是 NA,则不会绘制该点,但星号除外,在星号中,点的值设置为零。

inches 参数可以是逻辑向量,也可以是数值向量,长度都是任意的。仅使用第一个值。如果设置为 TRUE 或 numeric,则参考尺寸为一英寸。

如果设置为 FALSE,则参考尺寸是一个或两个轴上的一个单位。根据符号()的帮助页面,圆、正方形和星形使用 x 轴上的单位。对于矩形,宽度使用 x 轴的单位,高度使用 y 轴的单位。对于温度计,使用 y 轴单位。对于箱线图,宽度使用 x 轴单位,高度和胡须使用 y 轴单位。默认值为 TRUE。

所绘制形状的大小与参考大小成比例。对于圆,参考尺寸乘以参数第三列中的值得出圆的半径长度。对于正方形、矩形和星形,大小是指形状的最大尺寸。

add 参数可以是任意长度的逻辑向量,但是如果长度超过一个元素,就会给出警告。仅使用第一个元素。如果参数设置为 FALSE,它会告诉 symbols()绘制新的图。如果设置为 TRUE,符号()将添加到现有绘图中。默认值为 FALSE。这里,我们只考虑 add 等于 TRUE 的情况。

最后两个感兴趣的参数是 fg 和 bg。参数 fg 和 bg 设置颜色,并且可以接受 par()中的参数 col 可以接受的任何参数(参见 3.4.1 节)。对于圆形、正方形、矩形和星形,fg 参数设置形状的轮廓颜色,bg 设置填充颜色。

对于温度计,如果参数中有三列,则 fg 的颜色填充温度计中水平线下方的区域和形状的轮廓,而 bg 的颜色填充形状的其余部分。温度计的两个手柄的颜色由参数 col 设置。对于四列温度计,fg 设置轮廓和两条水平线之间区域的颜色,bg 设置其余区域的颜色。

对于盒状图,轮廓的颜色由 fg 设置,盒内区域的颜色由 bg 设置,而胡须和中值的颜色由 col 设置。

fg 和 bg 都可以是多元向量,都是循环的。参数 col 也可以是多元素的,但只使用第一个元素。fg 的默认值是 par()中 col 的值,bg 的默认值是 NA–这提供了一个透明的背景。

在清单 4-14 中,给出了使用 symbol()的示例代码。

plot(
  pop75.ordered, pop15.ordered,
  main="Example of circles, squares, rectangles,\nstars,  thermometers, and boxplots in symbols()",
  type="n"
)

symbols(
  pop75.ordered[ 1:8 ], pop15.ordered[ 1:8 ],
  circles=1:8/8,
  inches=0.35,
  fg=grey( 1:8/20 ),
  bg=grey( 10:18/20 ),
  add=TRUE
)

symbols(
  pop75.ordered[ 9:16 ], pop15.ordered[ 9:16 ],
  squares=1:8/8,
  inches=0.35,
  fg=grey( 1:8/20 ),
  add=TRUE
)

symbols(
  pop75.ordered[ 17:24 ], pop15.ordered[ 17:24 ],
  rectangles=cbind( 1:8/8, 5:12/8 ),
  inches=0.35,
  fg=grey( 1:8/20 ),
  add=TRUE
)

symbols(
  pop75.ordered[ 25:32 ], pop15.ordered[ 25:32 ],
  stars=cbind( 1:8/8, 5:12/8, 1:8/8, 5:12/8 ),
  inches=0.35,
  fg=grey( 1:8/20 ),
  add=TRUE
)

symbols(
  pop75.ordered[ 33:40 ], pop15.ordered[ 33:40 ],
  thermometers=cbind( 1:8/8, 5:12/8, 1:8/20 ),
  inches=0.35,
  fg=grey( 0.5 ),
  add=TRUE
)

symbols(
  pop75.ordered[ 33:40 ], pop15.ordered[ 33:40 ],
  thermometers=cbind(
    1:8/8,
    5:12/8,
    1:8/20,
    1:8/20 + 8:1/20
  ),
  inches=0.35,
  fg=grey( 0.75 ),
  add=TRUE
)

symbols(
  pop75.ordered[ 41:50 ], pop15.ordered[ 41:50 ],
  boxplots=cbind(
    1:10/20,
    5:14/20,
    1:10/20,
    10:1/20,
    5:14/15
  ),
  inches=0.35,
  fg=grey( 0.75 ),
  add=TRUE
)

Listing 4-14Code for an example of using symbols() to plot circles, squares, rectangles, stars, thermometers, and boxplots

在图 4-13 中,运行清单 4-14 中的代码。

img/502384_1_En_4_Fig13_HTML.jpg

图 4-13

使用符号创建圆形、正方形、矩形、星形、温度计和箱线图的示例()

注意,圆比正方形大得多,因为半径是圆直径的一半,而正方形的边长相等。此外,需要两次调用 symbols 来绘制温度计,在液位下方使用两种不同的颜色。

4 . 2 . 4 image()和 rasterImage()函数

image()和 rasterImage()函数在网格中绘制一个数字矩阵,其中网格中的每个方块呈现一种颜色,该颜色取决于数字的值。函数 image()允许用户设置网格中每一行和每一列的坐标。函数 rasterImage()设置角点并允许图像旋转。

4.2.4.1 图像( )函数

image()函数接受 15 个指定的参数和 par()的许多参数。像 symbols()一样,image()可以作为独立函数或辅助函数运行。15 个参数中只有 9 个作为辅助函数应用于 image()。

前六个参数是 x,为垂直网格线的 x 坐标;y,为水平网格线的 y 坐标;z(一个矩阵),为要绘图的网格点;zlim,表示要绘制的 z 值的上限和下限;xlim 和 ylim 是来自 plot()的标准参数,仅在 image()作为独立函数运行时使用。

x 参数可以是一个有序的数值向量,也可以是一个包含 x、y 和可选的 z 的列表。x 或 x[[ 1 ]]的长度可以是 z 中的行数(用于将 x 放置在网格正方形的 x 轴中点)或 z 中的行数加 1(用于将 x 放置在网格正方形的 x 轴边界)。)同样,y–或 x[[2]]–是有序的数值向量;而 y 的长度,或 x[[ 2 ]],是 z 中的列数或 z 中的列数加 1。x 和 y 参数没有默认值。

如果 x(或 y)是对数刻度,行数(或列数)加 1 是正确的选择,因为将网格线放在正方形的中点对于对数刻度没有意义。此外,网格正方形在左侧和底部是开放的,在右侧和顶部是封闭的——除了第一行和第一列,它们分别在左侧和右侧以及底部和顶部都是封闭的。

z–或 x[[3]]–参数是一个数字或逻辑矩阵,它包含用于创建颜色字符串矩阵的值,每个网格方块有一种颜色(通常不是唯一的)。如果要将图像添加到现有绘图中,则 z 和透明绘图的 NA 值是可接受的。z 参数没有默认值。

zlim 参数是一个两元素的数值向量,给出了 z 中实际绘制的点的最小和最大值。与缺失点一样,未绘制的点是透明的。zlim 的默认值是 z 的最小值和最大值。

最后九个参数是 col,表示要使用的色标;添加,用于是否创建独立地块;图()中的标准 xaxs、yaxs、xlab 和 ylab,仅用于独立图;断点,用于 z 值的断点,用于颜色分配;oldstyle,用于分配断点的方法;和 useRaster,了解为网格方块分配颜色的方法。

col 参数是标准颜色参数的向量(参见第 3.4.1 节),并设置颜色渐变——向量中的每种颜色都有一个分配给该颜色的 z 值范围。使用一个函数来生成颜色参数,比如 grey.colors(),使得选择颜色的任务变得简单。例如,将 grey( 4,rev=TRUE)指定给 col 会产生一个四色灰度,随着 z 值的增加,灰度从亮到暗。渐变中包含的颜色数量取决于网格的精细程度以及图像中包含的细节数量。col 的默认值是 hcl.colors( 12," YlOrRd ",rev = TRUE)。

add 参数是一个逻辑向量,它可以有多个元素,但是只使用第一个元素,如果参数有多个元素,则会显示一条警告。add 的默认值为 FALSE–绘制独立的图。在这一章中,我们只讨论添加等于真的情况——添加到现有的图中。

breaks 参数是一个数值向量,长度等于 col 指定的颜色数加 1。向量必须按升序排序;或者,根据 image()的帮助页面,向量按 image()排序并给出警告。方格的颜色取决于 z 值落在哪个区间。休息时间没有默认值。对于有对数刻度的轴,必须设置断点。

oldstyle 参数是一个可以强制为逻辑的向量,并且可以有多个元素。如果参数有多个元素,则只使用第一个元素,并给出警告。

设 n 为 col 指定的颜色数,如果 oldstyle 设置为 TRUE,则 breaks 为 c( -0.5,0.5,1.5,…,n+0.5)/n *(zlim[2]–zlim[1])+zlim[1],将第一个和最后一个间隔的中间值设置为 z 限制。如果 oldstyle 设置为 FALSE,则分隔符为 c( 0,1,2,…,n)/n *(zlim[2]–zlim[1])+zlim[1],这将第一个间隔的开始和最后一个间隔的结束设置为 z 限制。

如果使用 breaks,则忽略 zlim。如果不使用中断,根据 image()的帮助页面,zlim 限制内的值范围被划分为等距间隔。如果范围基于间隔的中点,则间隔边缘的颜色可能会超出 zlim 限制,但仍会被绘制。

我们感兴趣的最后一个参数 useRaster 是一个逻辑向量(或者可以强制为 logical 的向量),它可以是任意长度,但是只使用第一个元素,如果有多个元素,就会给出一个警告。如果设置为 TRUE,image()将创建并打印光栅图像。根据 image()的帮助页面,如果要将 useRaster 设置为 TRUE,网格方块必须等距。如果设置为 FALSE,则每个网格方块都基于多边形用给定的颜色绘制。

光栅图像在内存中效率更高。在 image()的帮助页面中,如果 useRaster 为 FALSE,则当 z 中没有 NAs 时,如果 getOption( "preferRaster ")为 TRUE 且 dev . capabilities(" raster image ")为" yes "或" non-missing ",仍会绘制光栅图像。在我的设备上,选项 preferRaster 为 NULL,设备功能参数 raster image 为" yes ",因此当 useRaster 为 FALSE 时,不会创建光栅图像。有关更多信息,请参见图像()的帮助页面。

在清单 4-15 中,给出了在 image()中使用 zlim、col、add、oldstyle 和 useRaster 的示例代码。

plot(
  pop75.ordered, pop15.ordered,
  main="Examples of col, add, zlim,\noldstlye, and useRaster in image()",
  xlim=c( 0.4, 5.1 ),
  type="n"
)

text(
  x=pop75.ordered[ c( 10, 25, 35, 47 ) ],
  y=34,
  labels=c(
    "oldstyle=FALSE\nzlim=c( 100, 170 )\ncolors=2\nmin( z )=94\nmax( z )=195",
    "oldstyle=TRUE\ncolors=2",
    "oldstyle=FALSE\nuseRaster=TRUE\ncolors=4",
    "oldstyle=TRUE\nuseRaster=TRUE\ncolors=4"
  ),
  cex=0.8
)

image(
  x=seq( -0.35, 0.35, length.out=87 ) +
    pop75.ordered[ 10 ],
  y=seq( -0.35, 0.35, length.out=61 ) * 9.64 * 61/87 +
    pop15.ordered[ 10 ],
  z=volcano,
  zlim=c( 100, 170 ),
  col=gray.colors( 2, rev=TRUE ),
  add=TRUE
)

image(
  x=seq( -0.35, 0.35, length.out=87 ) +
    pop75.ordered[ 25 ],
  y=seq( -0.35, 0.35, length.out=61 ) * 9.64 * 61/87 +
    pop15.ordered[ 25 ],
  z=volcano,
  col=gray.colors( 2, rev=TRUE ),
  useRaster=TRUE,
  add=TRUE
)

image(
  x=seq( -0.35, 0.35, length.out=87 ) +
    pop75.ordered[ 35 ],
  y=seq( -0.35, 0.35, length.out=61 ) * 9.64 * 61/87 +
    pop15.ordered[ 35 ],
  z=volcano,
  col=gray.colors( 4, rev=TRUE),
  add=TRUE
)

image(
  x=seq( -0.35, 0.35, length.out=87 ) +
    pop75.ordered[ 47 ],
  y=seq( -0.35, 0.35, length.out=61 ) * 9.64 * 61/87 +
    pop15.ordered[ 47 ],
  z=volcano,
  col=gray.colors( 4, rev=TRUE ),
  useRaster=TRUE,
  add=TRUE
)

Listing 4-15Code for the example of using zlim, col, add, oldstyle, and useRaster in image()

请注意,数据集 volcano 是数据集包中的一个数据集,因此对于大多数用户来说,默认情况下是可用的。数据集有 87 行和 61 列。根据 ?? 火山的帮助页面,伊甸山是奥克兰火山区大约 50 座火山之一。该数据集给出了 Maunga Whau 在 10m×10m 网格上的地形信息。

—R 中火山的帮助页面

并且,从帮助页面来看,数据集是

一个 87 行 61 列的矩阵,行对应于东西走向的网格线,列对应于南北走向的网格线。

—R 中火山的帮助页面

还要注意图像的位置是如何设置的,以给出统一和缩放的图像。首先,图像被设置为具有相同的宽度和高度,并且在 x 和 y 方向上都以零为中心。

但是,函数 image()将图像缩放到轴上的单位。所以 y 刻度乘以 9.64——就是(par(" cxy ")[2]/par(" CIN ")[2])/(par(" cxy ")[1]/par(" CIN ")[1])。公式是字符的 y 单位数除以字符的英寸高度,结果除以字符的 x 单位数除以字符的英寸宽度,即 y 轴上每英寸的单位数除以 x 轴上每英寸的单位数。然后 9.64 乘以 z 中的行数除以 z 中的列数,得到的图像比例与矩阵的比例相同。最后,图像的位置被添加到缩放的图像中。

在图 4-14 中,运行清单 4-15 中的代码。

img/502384_1_En_4_Fig14_HTML.jpg

图 4-14

在 image()中使用 zlim、col、add、oldstyle 和 useRaster 的示例

请注意,在第一个图像中,z 的高值和低值被绘制为白色(这是我的机器上透明的默认设置),因为 zlim 比 z 的范围窄。在前两个图像中,仅使用了两种颜色。在第三和第四幅图像中,使用了四种颜色。此外,对于较大的 z 值,旧样式的图像比当前样式的图像绘制得稍窄。

4.2.4.2 函数的作用是

rasterImage()函数绘制 raster 类的文件以创建图像。该函数接受七个参数以及 par()中的许多参数。rasterImage 的第一个参数是 Image,对于一个可以强制为 raster 类的对象;第二、第三、第四和第五个参数是 xleft、ybottom、xright 和 ytop,表示图像的位置;第六个参数是 angle,表示旋转图像的角度;第七个参数是 interpolate,用于决定是否对图像进行线性插值。

参数 image 接受任何可以强制分类为 raster 的对象。栅格类是一类包含颜色值字符串的对象,可以是矢量、矩阵或数组。函数 rasterImage()试图通过使用 as.raster()将 Image 的值转换为类 raster 的对象(它使用 rgb()进行转换)。有关转换为栅格类的详细信息,请转到 as.raster()的帮助页面。

对象必须是逻辑、数字、字符或 raw 类的向量,或者是矩阵或数组类的向量,并且是逻辑、数字、字符或 raw 模式的向量。如果 image 是一个向量,image()将在元素的颜色级别绘制水平线,以填充图像的尺寸。图像没有默认值。

参数 xleft 和 xright 是图像位置在 x 轴上的左右坐标。参数 ybottom 和 ytop 是图像位置在 y 轴上的上下坐标。所有四个参数都可以采用任意长度的数字向量,并且元素循环——重复绘制图像。这些值必须在图的 x 和 y 界限内。xleft、xright、ybottom 和 ytop 没有默认值。

参数 angle 告诉 image()围绕图像的左下角旋转图像。旋转角度是参数指定的角度,以度为单位。旋转是逆时针的,并平行于 x 轴开始。默认值为 0–或平行于 x 轴。

参数 interpolate 是任意长度的逻辑向量(或者可以强制为逻辑向量)。如果绘制了图像的多个副本,插值循环的值。插值的默认值为 TRUE。

根据 rasterImage()的帮助页面,并非所有设备都会打印光栅图像。此外,根据设备的不同,如果调整绘图的大小,图像可能不会缩放。

在清单 4-16 中,给出了使用 rasterImage()的示例代码。

plot(
  pop75.ordered, pop15.ordered,
  main="Examples of image, the location arguments,\nangle, and interpolate in rasterImage()",
  type="n"
)

text(
  c( 0.75, 4.3, 1.4, 2.95, 4.35, 2.9 ),
  c( 46.5,  26,  24,    24,     30,  45 ),
  labels=c(
    "VECTORS",
    "MATRICES",
    "interpolate=FALSE\nangle=0",
    "interpolate=FALSE\nangle=0",
    "interpolate=TRUE\nangle=60",
    "interpolate=TRUE\nangle=0"
  ),
  cex=0.8
)

rasterImage(
  grey(
    1-( t( volcano )[ 61:1,]/max( volcano ) )
  ) ,
  xleft=-0.6 +
    pop75.ordered[ 20:22 ],
  ybottom=-0.6*10.94*61/87 +
    pop15.ordered[ 20:22 ],
  xright=0.6 +
    pop75.ordered[ 20:22 ],
  ytop=0.6*10.94*61/87 +
    pop15.ordered[ 20:22 ],
  interpolate=c( 0, 0, 1, 1 )
)

rasterImage(
  matrix(
    grey(
      1-( t( volcano )[ 61:1,]/max( volcano ) )
    ),
    nrow=61
  ) ,
  xleft=-0.6 +
    pop75.ordered[ c( 30, 45 ) ],
  ybottom=-0.6*10.94*61/87 +
    pop15.ordered[ c( 30, 45 ) ],
  xright=0.6 +
    pop75.ordered[ c( 30, 45 ) ],
  ytop=0.6*10.94*61/87 +
    pop15.ordered[ c( 30, 45 ) ],
  angle =c( 0, 60),
  interpolate=c( 0, 1, 1, 1 )
)

Listing 4-16Code for the examples of using image, the location arguments, angle, and interpolate in rasterImage()

请注意,volcano 是转置的,因此列变成了行,行变成了列。此外,rasterImage()通过将顶行放在顶部位置开始绘图,依此类推,因此转置矩阵的行被反转。

函数 grey()创建一个向量,因此在第二次调用 rasterImage()时,调用 matrix()来重新创建一个字符颜色代码的矩阵。

在图 4-15 中,运行清单 4-16 中的代码。

img/502384_1_En_4_Fig15_HTML.jpg

图 4-15

在 rasterImage()中设置图像、位置参数、角度和插值的示例

注意,对于三个向量图,使用插值的图像比没有使用插值的图像平滑得多。对于矩阵的两个图,没有强烈的差异。此外,请注意 grey()参数的元素都在 0 和 1 之间,包括 0 和 1,对于 volcano 的大值来说是小的,对于 volcano 的小值来说是大的。从 volcano 中减去一个小于 94 的常数可以创建一个更亮的图。

4.3 使用线条的函数

在本节中,我们将介绍基于行的辅助函数。这些函数是 lines()、abline()、curve()、segments()、arrows()、rect()、polygon()、polypath()和 contour()。

4 . 3 . 1 lines()和 abline()函数

lines()函数通常用于绘制线图。在 lines()的帮助页面中,指定的参数是 x、y 和 type。par()的大多数未指定的参数也可以设置。

参数 x 和 y 是 plot.default()的标准参数。如果两者都给定,那么两者的长度必须相同。x 没有默认值。y 的默认值为 NULL。

参数类型给出了要绘制的线条的类型。有关类型的描述,请参见第 3.3.1 节。lines()中 type 的默认值是“l”,也就是说,由 x 和 y 给定的点通过线连接起来,连接的顺序是这些点在向量 x 和 y 中出现的顺序。

函数的作用是:在图上画一条直线。该函数接受 par()的七个指定参数和一些未指定参数。其中六个参数以不同的形式向 abline()提供了相同的信息。第七个参数用于对数刻度。

前两个参数是 a 和 b,代表直线的截距和系数。参数是单元素数值向量。

第三和第四个参数是 h 和 v,用于在 h 给出的 y 值处绘制水平线,在 v 给出的 x 值处绘制垂直线。这些参数是任意长度的数值向量。

第五个参数 coef 是一个包含截距和斜率的两元素数值向量。(这个向量也可以分配给 a,结果与分配给 coef 的结果相同。)

第六个参数是 reg。任何可以作为 coef()函数的参数的对象都可以赋给 reg。例如,lm( pop15.ordered ~ pop75.ordered)可以用作 reg 的值。如果 reg 的值只包含一个元素(没有截距的回归),则截距设置为零,斜率设置为该元素的值。如果 reg 的值包含两个以上的元素(具有多个回归元的回归),则使用截距和第一个回归系数。

默认情况下,参数 a、b、h、v、coef 和 reg 为空。该函数检测第一个参数的类,并可以判断该参数是 a 还是 coef、a 不带 b 还是 reg,并根据该判断创建行。参数 h 和 v 必须按名称指定,或者按顺序放在正确的位置。

参数 untf 接受一个只有一个元素的逻辑向量。当坐标轴上至少有一个刻度是对数刻度时,使用该参数。回归线必须适合未转换的数据,但是如果 ab 线绘制在具有对数刻度的图上,则可以通过将 untf 设置为 TRUE 来绘制考虑转换的线。默认值为 FALSE。

在清单 4-17 中,给出了 line()和 abline()的示例代码。

# the regression

reg.log = glm(
  dpi.ordered ~ pop75.ordered
)

coef( reg.log )
  (Intercept) pop75.ordered
    -278.5465      604.1452

# the plots
plot(
  pop75.ordered, dpi.ordered,
  type="n",
  main="Example of lines() and\na, b, h, and v in abline()"
)

lines(
  pop75.ordered, dpi.ordered,
  type="b",
  col=grey( 0.65 ),
  cex=0.4
)

abline(
  -279,
  604,
  h=c( 1000, 2000, 3000 ),
  v=c( 1, 2, 3, 4 )
)

plot(
  pop75.ordered, dpi.ordered,
  log="y",
  type="n",
  main="Example of untf in abline()"
)

lines(
  pop75.ordered, dpi.ordered,
  type="b",
  col=grey( 0.65 ),
  cex=0.4
)

abline(
  reg.log,
  h=c( 1000, 2000, 3000 ),
  v=c( 1, 2, 3, 4 ),
  untf=TRUE
)

Listing 4-17Code

for an example of lines() and a, b, h, v, and untf in abline()

在图 4-16 中,运行清单 4-17 中的代码。

img/502384_1_En_4_Fig16_HTML.jpg

图 4-16

线()和 a、b、h、v 以及 abline()中的 untf 的示例

注意,两个图都是相同数据和相同直线的图。不同之处在于,第二个图在 y 轴上具有对数刻度。

曲线( )函数

curve()函数根据输入变量绘制类函数或数学表达式的对象,例如 sin()或 x + 3。函数曲线()可以是独立函数,也可以是辅助函数。在这一章中,只讨论了函数的辅助形式。

函数 curve()接受 11 个指定的参数加上 par()的许多未指定的参数。第一个参数是 expr,表示要绘制的表达式。第二个参数来自,表示要输入的变量的第一个值。第三个参数是 to,用于输入变量的最后一个值。第四个参数是 n,表示计算表达式的点数。输入变量的值在从到之间均匀分布。

第五个参数是 add,表示该图是独立的还是辅助的。第六个参数是 type,表示线的类型。第七个参数是 xname,表示要输入的变量的名称。第八个到第十个参数是 plot()中的标准 xlab、ylab 和 log,仅在独立绘图时使用。第 11 个参数是 xlim,表示要输入的变量的范围。

expr 参数是要绘制的函数或数学表达式。该参数需要一个函数名或数学表达式,它是用作输入的变量的函数,默认情况下称为 x。命名函数或数学表达式的结果长度必须等于输入变量的长度。命名函数可以由用户创建。expr 没有默认值。

接下来的三个参数是 from、to 和 n——它们都采用数字向量。在所有三种情况下,只使用第一个元素。对于 n,如果 n 的长度大于 1,则会给出警告。对于“从”和“到”,情况并非如此。“从”和“到”的默认值为空。n 的默认值是 101。

add 参数接受一个长度为 1 的逻辑向量,它的值可以是 TRUE、FALSE 或 n a。(add 的任何其他值,包括多元向量,将默认为 FALSE。)本章仅涵盖辅助地块的真值。默认值为 FALSE。

类型参数是 plot()的标准参数(参见第 3.3.1 节)。“曲线类型”()的默认值是“l”——对于线形图。

xname 参数采用单元素字符向量。xname 的默认值是“x”。

xlim 参数采用两个元素的数值向量。这两个值给出了输入变量取值的范围。如果 add 等于 TRUE,xlim 的值不一定等于 x 轴的极限。默认情况下,xlim 等于 NULL。

如果指定了 from 和 to,xlim 默认为 c( from,to)。如果 from 和/或 to 为空,则 from 和/或 to 默认为 xlim 的相应元素-如果 xlim 不为空。如果 from、to 和 xlim 都为空,并且 add 等于 TRUE,则输入变量的限制取自 x 轴的限制。

在清单 4-18 中,给出了曲线()的一些例子的代码。

plot(
  pop75.ordered, pop15.ordered,
  main="Examples of using expr,\nfrom, to, n, xname, xlim, add, & lty in curve()"
)

curve(
  49.86 - 6.44*x,
  add=TRUE
)

curve(
  49.86 - 6.44*ex + 5*sin( ex/2.5*pi ),
  xname="ex",
  add=TRUE,
  lty="dotted"
)

curve(
  35*x/x,
  from=1.5,
  to=3.5, n=2,
  add=TRUE,
  lty="longdash"
)

curve(
  49.86 - 6.44*x + 5*cos( x/2.5*pi ),
  xlim=c( 1, 4 ),
  add=TRUE,
  lty="dashed"
)

Listing 4-18Code for the examples of using expr, from, to, n, xname, xlim, add, and lty in curve()

在图 4-17 中,代码运行。

img/502384_1_En_4_Fig17_HTML.jpg

图 4-17

在 curve()中使用 expr,from,to,n,xlim,xname 与 add 的示例

在第一次(实线)和第二次(虚线)调用图 4-17 中的曲线()时,数据中 x 的全范围用于绘制曲线。在第三个调用中(长虚线),from 和 to 参数用于将 x 的限制设置为 1.5 和 3.5。在第四个调用(虚线)中,xlim 用于将限制设置为 1 和 4。第三个调用展示了绘制水平线的一种方法。

4.3.3 线段( )和箭头( )函数

segments()函数绘制线段,arrows()函数绘制带箭头的线段。两者对于注释地块都很有用。给出了应用两种函数的示例。

4.3.3.1 segments()函数

segments()函数绘制线段。该函数接受 par()的七个指定参数和一些未指定参数。前四个参数是 x0、y0、x1 和 y1,分别代表线段的 x 和 y 端点。最后三个指定的参数是 par()中的标准 col、lty 和 lwd(参见第 3.4.1、3.3.2 和 3.4.4 节)。

x0、y0、x1 和 y1 参数采用数值向量。这些向量不一定是相同的长度,并且循环填充到具有最长长度的向量的长度。x0 和 y0 参数没有默认值;x1 和 y1 的默认值分别为 x0 和 y0。

col、lty 和 lwd 参数是向量,长度不一定相同,并且都循环到 x0、y0、x1 和 y1 的最长向量的长度。col、lty 和 lwd 的默认值是 par()中参数的值。

4.3.3.2 箭头( )函数

arrows()函数与线段相同,只是在线段的一端或两端绘制了一个箭头。该函数还有一些参数来设置箭头的样式。该函数接受 par()的 10 个指定参数和一些未指定参数。

前四个参数是 x0、y0、x1 和 y1,它们的行为与 segments()相同。第五个参数是长度,表示箭臂的长度。第六个参数是角度,表示箭臂和箭杆之间的角度。第七个参数是代码,表示要绘制的位置和数量。第八个、第九个和第十个参数是 col、lty 和 lwd,它们的行为与 segments()中的行为相同。

长度和角度参数采用任意长度的数值向量;但是,两者都只使用了第一个元素。参数长度以英寸为单位,参数角度以度为单位。长度的默认值为 0.25,角度的默认值为 30。

code 参数接受一个任意长度的整数向量,但是只使用了第一个元素。向量元素的值可以是 1、2 和 3。如果 code 等于 1,则在箭头开始的末端绘制箭头;如果为 2,则在箭头结束的一端;如果 3,在两端。默认值为 2。

4.3.3.3 使用线段( )和箭头( )的例子

在清单 4-19 中,给出了使用 x0、y0、x1、y1、from、to、n、xname、add 和 xlim 段()和 x0、y0、x1、y1 长度、角度和箭头代码()的示例代码。

plot(
  pop75.ordered, pop15.ordered,
  type="n",
  main="Example of segments() and arrows()"
)

text(
  pop75.ordered, pop15.ordered
)

text(
  c( 0.9, 1, 2.65, 4, 4.4 ),
  c( 31, 23, 47.3, 46, 36 ),
  paste( "segment", c(1:2, 4:6 ) )
)

segments(
  x0=pop75.ordered[ c( 1, 21, 24, 14, 25, 45 ) ],
  y0=pop15.ordered[ c( 1, 21, 24, 14, 25, 45 ) ] +
    rep( c( -2, 2 ), each=3 ),
  x1=pop75.ordered[ c( 21, 24, 42, 25, 45, 50 ) ],
  y1=pop15.ordered[ c( 21, 24, 42, 25, 45, 50)  ] +
    rep( c( -2, 2 ), each=3 )
)

arrows(
  x0=c(  0.9,   4 ),
  y0=c( 33, 45 ),
  x1=c( 1.05, 3.2 ),
  y1=c( 36, 39 ),
  length=0.2,
  angle=20,
  code=2
)

arrows(
  x0=c( 2.15, 2 ),
  y0=c( 23.5, 46 ),
  x1=c( 1.4, 2.3 ),
  y1=c( 23, 47 ),
  length=0.1,
  angle=10,
  code=1
)

arrows(
  4.6,
  35,
  4.6,
  28.6,
  code=3
)

Listing 4-19Code for the example of using x0, y0, x1, and y1 in segments() and x0, y0, x1, y1, length, angle, and code in arrows()

在图 4-18 中,运行清单 4-19 中的代码。

img/502384_1_En_4_Fig18_HTML.jpg

图 4-18

在线段()中使用 x0、y0、x1 和 y1,在箭头()中使用 x0、y0、x1、y1、长度、角度和代码的示例

请注意,区段 3 不在图中,因此不包括该区段。此外,当只提供位置坐标时,对 text()的调用使用 x 和 y 变量的索引值作为标签。

4.3.4 绘制自封闭线的函数:rect()、polygon()和 polypath()

自我封闭的线条有时很有用。本节介绍 rect()、polypath()和 polygon()函数。rect()函数绘制矩形,polygon()和 polypath()函数绘制多边形。给出了一个应用这三个函数的例子。

4.3.4.1 rect()函数

rect()函数根据矩形的四个角点绘制矩形。该函数接受 par()的 10 个指定参数和一些未指定参数。前四个参数是 xleft、ybottom、xright 和 ytop——表示矩形四个角的位置。第五个和第六个参数是密度和角度——用于用有角度的线填充矩形。这里,密度是每英寸的线条数,角度是线条与水平线的角度。

第七个参数是 col——表示倾斜线条的颜色或纯色填充颜色,具体取决于 density 的值。第八个参数是 border——如果绘制了边框,则表示边框的颜色,否则表示不包含边框。第九个和第十个参数是 plot()中的标准 lty 和 lwd。

前四个参数采用任意长度的数字向量。这些元素将循环输出,其长度等于最长向量的长度。如果向量的长度没有被最长向量的长度整除,则会给出警告,但矩形仍会打印。为最长向量中的每个元素绘制一个矩形。但是,如果向量中的值为 n a,则不会绘制与该元素关联的矩形。NA 值像任何其他值一样循环。位置参数没有默认值。

密度和角度参数采用任意长度的数值向量。元素循环到最长位置向量的长度。如果密度元素为正,则该数字给出矩形内每英寸的行数。绘制线条,在绘制的线条后面,矩形是透明的。

如果密度为 0,则不绘制线条,矩形不填充颜色,并且矩形是透明的。如果为 NULL,结果取决于 col 的值。对于设置为颜色的 col,颜色填充矩形;否则,结果与将“密度”设定为 0 相同。如果密度为负或 NA,则矩形用颜色填充。密度的默认值为空。

angle 参数给出线条绘制时与水平线的角度,以度为单位。如果角度等于 NULL,则不绘制任何线,矩形是透明的。角度的默认值是 45 度。

col 参数是 plot()的标准参数(参见第 3.4.1 节了解可使用的值的种类)。在 rect()中,col 接受一个任意长度的向量,它循环到位置参数的最长向量的长度。

如果 col 采用除 NA 或 NULL 之外的有效值,并且密度等于负数、NA 或 NULL,则矩形用 col 值给出的颜色填充。如果 col 采用除安娜或 NULL 之外的有效值,并且密度采用正数,则 col 给出矩形中线条的颜色。如果 col 等于 NA 或 NULL,则矩形不填充颜色;但是,如果 density 是正数(颜色由 par()中的 fg 值设置),则会绘制线条。col 的默认值为 NA。

R 中的颜色可以具有从不透明到完全透明的透明度级别(参见第 3.4.1 节)。在 rect()中,如果 color 不等于 NA 或 NULL,则矩形的填充颜色具有由 col 的值给定的透明度。对于不透明的颜色和重叠的矩形,最后绘制的矩形的颜色会覆盖任何以前的颜色或线条。

border 参数采用任意长度的数字、字符或逻辑向量。向量循环到最长位置向量的长度。参数设置矩形边框的颜色。数字和字符向量采用与 col 相同类型的值。逻辑向量的值可以是真或假。

如果绘制线条,NULL 或 TRUE 值会告诉 rect()使用线条的颜色作为边框。否则 border 的值就是 par()中 fg 的值。NA 或 FALSE 值会从绘图中省略边框。border 的默认值为 NULL。

lty 和 lwd 参数是 par()中的标准参数(参见第 3.3.2 和 3.4.4 节)。).在 rect()中,lty 和 lwd 影响直线和边界。lty 的默认值是 par(“lty”),lwd 的默认值是 par(“LWD”)。

多边形 4.3.4.2()函数

polygon()函数创建多边形,与 polypath()函数略有不同,后者也绘制多边形。这两个函数都自动将 x 和 y 的最后一个值闭合到 x 和 y 的第一个值,函数 polygon()接受八个指定的参数和 par()的一些未指定的参数(在参数顺序中的第八位)。

前两个参数 x 和 y(或者 x 本身,y 设置为空)给出了多边形的顶点。第三个到第七个参数是 density、angle、border、col 和 lty,它们的行为与 rect()函数基本相同。第八个指定的参数是 fillOddEven。有关该参数作用的说明,请参见 polygon()的帮助页。在我的设备上,这个参数似乎没有任何作用。

如果包含 y,参数 x 和 y 是数字向量,长度必须相同。向量 y 可以省略——在这种情况下,x 可以是一个两列矩阵,在行中包含顶点的 x 和 y 值。或者,x 是向量,其值相对于一条线在垂直方向上绘制,其中该线在 x 轴上从 1 开始,在 y 轴上从向量的第一个值开始,在 x 等于向量的长度,y 等于向量的最后一个值时结束。

如果将 NAs 放置在向量(或 vector)的给定元素处或矩阵的给定行中,polygon()会在 NAs 处结束多边形,并使用 NAs 之后的数字开始新的多边形。

有关密度、角度、边界、列和 lty 的描述,请参见本小节第一部分中 rect()的描述。但是,参数的行为方式有一点不同。在多边形中,对于设置为空的列,如果密度等于 0,则多边形是透明的,而如果密度等于空,则多边形是不透明的。对于 rect(),两者都是透明的。这些函数的默认值是相同的。

显然,如果 density 等于 NA、NULL、负数或 0,fillOddEven 参数可以设置为任何 R 对象。如果 density 是正数,fillOddEven 必须是一个可以强制为逻辑模式的向量。如果 fillOddEven 长于一个元素并且 density 大于零,则给出警告,而不是错误。fillOddEven 的默认值为 FALSE。

4.3.4.3 多路径( )函数

polypath()函数采用与 polygon()相同的指定参数,只是不包括密度和角度,也不特别包括 lwd。该函数只填充颜色,不填充线条,因此密度和角度不适用。此外,还包含了一个参数 rule,而不是 fillOddEven。

border、col 和 lty 参数都采用与 polygon()相同的值,但是对于多元向量,只使用第一个元素。如果 border 等于 NA,则不绘制边界。如果 border 等于 NULL,则边框采用 par()中 fg 给定的颜色。否则,边框等于分配给参数的颜色。

在 col 等于 NA 或 NULL 的情况下,在多边形中不绘制颜色,并且多边形是透明的。如果 col 等于 NA 或 NULL,并且 border 不是 NA,则用 border 给定的颜色画出多边形的轮廓。在所有其他情况下,如果 col 等于一种颜色,则用 col 给定的颜色填充多边形。

单独绘制多个多边形时,对于等于 NA 或 NULL 的 col,多边形是透明的。纯色不透明(指定的颜色可以透明)。当从对 polypath()的同一个调用中绘制多个多边形时,rule 参数确定多边形重叠时多边形的行为。

当嵌线等于“缠绕”时,绘制多边形的方向(顺时针或逆时针)会影响重叠多边形的行为。对于嵌套或重叠的多边形,如果绘制的前两个多边形都是顺时针方向或逆时针方向,则所有多边形都用相同的颜色填充。如果一个是顺时针方向,另一个不是,那么,在它们重叠的地方,交叉点被标为白色。对于嵌套地块,随着多边形变小,颜色和白色交替出现。

如果有三个以上的重叠地块,规则会变得更加复杂。多边形看起来有三个多边形的交集,如果一个是逆时针方向,一个是顺时针方向,则两个多边形的交集是白色的,如果两个多边形的方向相同,则两个多边形的交集是彩色的。

对于我看到的例子,如果规则等于“偶数”,所有的图都以同样的方式绘制。第一个图标有颜色,第二个图标有颜色,其中第二个图不与第一个图重叠。当第二个图与第一个图重叠时,第二个图为白色。如果第三个图与前两个图都不重叠,则第三个图是彩色的。在所有三个地块相交的地方,该地块标有颜色。如果只有两个点相交,如果下面的图是彩色的,则第三个点绘制为白色,如果下面的图是白色的,则第三个点绘制为彩色。

4.3.4.4 矩形( )、多边形( )和多边形( )的例子

在清单 4-20 中,给出了运行 rect()、polygon()和 polypath()的示例代码。

plot(
  pop75.ordered, pop15.ordered,
  type="n",
  xlab="",
  ylab="",
  main="Examples of rect(), polygon(), & polypath()"
)
text(
  c( 1.05, 2.42, 4 ),
  25,
  c( "rect()", "polygon()", "polypath()" )
)

rect(
  c(  0.85, 0.55, 1.05, 0.75 ),
  31,
  c( 1.35, 1.55 ),
  c( 42, 45 ),
  density=c( NA, 3 ),
  col=grey(
    c( 0.9, 0.7, 0.5, 0.3 )
  ),
  border=grey(
    c( 0.7, 0.3 )
  )
)

polygon(
  c( 2.8, 3.5, 2.1,  NA, 2.8, 3.3,   2.2, NA, 2.4,   3.2, 2.4 ) - 0.38,
  c( 42,  31,  31,  NA,  40,  32, 31.5, NA,  32, 32.5, 38 ),
  density=c( 3, 4, NA ),
  col=grey(
    c( 0.7, 0.45, 0.55 )
  ),
  fillOddEven=0,
  border=NULL
)

polypath(
  c( 2.8, 3.5, 2.1,  NA,  2.2,  3.3, 2.8,  NA, 2.4,   3.2, 2.4 ) + 1.2,
  c(  42,  31,  31,  NA, 31.5, 32,  40,  NA,  32, 32.5,  38 ),
  col="grey60",
  rule="winding",
  border=TRUE,
  lwd=2,
  lty="dashed"
)

Listing 4-20Code for

the examples of rect(), polygon(), and polypath()

在图 4-19 中,运行清单 4-20 中的代码。

img/502384_1_En_4_Fig19_HTML.jpg

图 4-19

使用 rect()、polygon()和 polypath()的示例

请注意,对于 rect()的示例,首先绘制浅灰色矩形,其次是带有浅灰色线条的矩形,第三是深灰色矩形,最后是带有深灰色线条的矩形。带有浅灰色线条的矩形从等于 0.55 的 x 延伸到等于 1.55 的 x,但是带有深灰色线条的矩形绘制在从等于 0.75 的 x 到等于 1.55 的浅灰色线条上。

类似地,浅灰色矩形从等于 0.85 的 x 延伸到等于 1.35 的 x,但是深灰色矩形绘制在从 1.05 到 1.35 的 x 的浅灰色矩形上。此外,在浅色和深灰色矩形上可以看到深灰色线,因为带有深灰色线的矩形是最后绘制的。

对于多边形()的示例,绘制了三个三角形。首先绘制外部三角形,其次是中间三角形,最后是内部三角形。通过使用 NAs 分离每组绘图指令,在对 polygon 的一次调用中绘制了所有三个三角形。请注意,尽管这些线被第三个三角形覆盖,但在第三个三角形上边界是可见的。在对 polygon 的另一个调用中绘制第三个三角形可以解决这个问题。

对于 polypath()示例,绘制的三个三角形与 polygon()示例相同。第一个三角形按顺时针方向绘制,第二个和第三个三角形按逆时针方向绘制。使用了规则“缠绕”,因此——由于第一个和第二个三角形的绘制方向不同——第二个三角形是白色的,第一个和第三个是深灰色的。但是,当第三个三角形与第一个三角形相交时——因为两个三角形绘制的方向不同——第三个三角形在第一个三角形的灰色上绘制白色。请注意,对于 polypath()示例,线型是“虚线”,线宽是 2。

4.3.5 等高线( )函数

contour()函数绘制等高线图。该函数可以作为独立函数或辅助函数运行。在本章中,我们仅将该函数作为辅助函数。本例中的数据集是数据集包中的火山数据集。有关数据集的描述,请参见 4.2.4.2 部分,或者参见火山的帮助页面

contour()函数接受 19 个指定的参数以及来自 par()的许多未指定的参数。前九个参数是 x,代表 x 轴上放置 z 行的位置;y,表示 y 轴上放置 z 列的位置;z,用于计算轮廓的值的矩阵;nlevels,表示要使用的轮廓级别数,仅在未设置级别时使用;级别,用于轮廓的级别(优先于 the levels 标签,用于等高线上的标签;xlim 和 ylim,plot()的标准参数,仅用于独立选项;和 zlim,供 z 的上下限使用。

参数 x 可以是向量,也可以是两个或三个元素的列表——都是数字模式。如果 x 是一个向量,向量的长度就是 z 中的行数。向量必须按升序排列。此外,如果 x 是一个向量,y 必须作为一个单独的向量提供。如果 x 是一个列表,该列表可以包含 x 和 y 或 x、y 和 z 作为两个或三个元素。x 的默认值是 seq( 0,1,length . out = nrow(z))–它提供 0 到 1 之间(包括 0 和 1)等间距值的正确数目。

参数 y 采用长度等于 z 中列数的递增数字向量。y 的默认值为 seq( 0,1,length.out=ncol(z))。

自变量 z 是一个数值矩阵。行中的值用于计算垂直方向(x 轴上方)的等高线。列中的值用于计算水平方向(y 轴右侧)的等高线。每个值都有一个 x 坐标和一个 y 坐标。第一行与第一个 x 值相关联,该行(给出 contour()使用的垂直方向的值)从图的底部到顶部。z 没有默认值。

第四个和第五个参数是 nlevels 和 levels。分配了其中一个,但不是两个都分配。参数 nlevels 给出了要查找的等高线级别数。参数 levels 给出了创建等值线的值。一元整数向量用于 nlevels,任意长的数字向量用于 levels。nlevels 的默认值是 10。级别的默认值是 pretty( zlim,nlevels)。(函数 pretty()在一组界限内寻找合适的区间,其中设定了一定数量的区间。有关更多信息,请参见 pretty()的帮助页面。)

第六个参数是标签。该参数采用任意长度的字符向量(或可以强制为字符的向量)。元素循环到一定的级别数。labels 的默认值为 NULL,也就是说,R 创建标签。

第七、第八和第九个参数是 xlim、ylim 和 zlim。仅当 contour 作为独立函数运行时,参数 xlim 和 ylim 才会影响绘图。自变量 zlim 给出了 z 的下限和上限,在此范围内形成等值线。该参数采用任意长度的数字向量。使用向量中的最小值和最大值。xlim、ylim 和 zlim 的默认值为 range( x,有限=真)、range( y,有限=真)和 range(z,有限=真)。(函数 range()查找数值对象的范围。有限参数告诉 range()忽略非有限值。)

最后十个参数是 labcex,代表标签中的字符大小;drawlabels,告诉等高线是否绘制标签;方法,用于放置标签的方法;vfont,可选地,使用 Hershey 字体;来自 plot()和 par()的标准轴、frame.plot、col、lty 和 lwd 和 add,用于将 contour()作为辅助图或独立图运行。

labcex 参数给出了标签的字符大小。根据轮廓的帮助页面,尺寸是绝对的,而不是相对于 par()中 cex 的值。该参数采用任意长度的数字向量,但只使用了第一个元素。默认值为 0.6。

drawlabels 参数采用任意长度的逻辑向量(或可以强制为逻辑的向量),但只使用第一个元素。默认值为 TRUE,即绘制等高线标签。

方法参数采用任意长度的字符向量,但只使用第一个值。第一个元素的可能字符值是“简单”、“边缘”和“最平”。任何其他值都会产生错误。

在 contour()的帮助页面中,“简单”的值表示标签绘制在图的边缘并与等高线重叠。“边缘”的值表示标注绘制在地块的边缘,并嵌入在等高线中。值“最平坦”表示标注绘制在等值线最平坦的部分,并嵌入到等值线中。方法的默认值是“最平”。

vfont 参数指定 Hershey 字体系列和字体粗细。该参数是一个两元素的字符向量。要查看可用的字体,请在 R 提示符下运行 Hershey 演示。要查看使用 Hershey 字体的示例,请参见清单 4-20 。vfont 没有默认值。

axes 和 frame.plot 参数仅在创建独立绘图时使用,并且是 plot()的标准参数。col、lty 和 lwd 参数是 par()中的标准参数。col 的默认值是 par()中 fg 的值。lty 的默认值是 par()中 lty 的值。lwd 的默认值是 lwd 在 par()中的值。

add 参数接受任意长度的逻辑向量(或者可以强制为逻辑向量),但是,如果长度超过一个元素,则只使用第一个元素并给出警告。

在清单中,4-21 是使用 contour()的示例代码。该示例绘制了数据集火山的等值线。默认情况下,在 R 中加载包数据集,因此对于大多数用户来说,可以像访问工作区中的任何对象一样访问数据。

plot(
  pop75.ordered, pop15.ordered,
  type="n",
  xlab="x",
  ylab="y",
  xlim=c( 0, 5.5 ),
  ylim=c( 18, 52 ),
  main="Example of x, y, z, levels, labels, labcex,\nmethod, vfont, col, lty, lwd, and add in contour()",
  sub="The volcano Dataset"
)

contour(
  x=0.5 + 4.5*seq( 0, 1, len=87 ),

   y= 20 +  30*seq( 0, 1, len=61 ),

  z=volcano,

  levels=c( 1:6*20+60 ),
  labels=paste( 1:6*20+60 ),
  labcex=0.8,
  method="flattest",
  vfont=c("serif", "bold"),
  col="grey10",
  lty="dotdash",
  lwd=2,
  add=TRUE
)

Listing 4-21Code for an example of contour() using x, y, z, levels, labels, labcex, method, vfont, col, lty, lwd, and add

在图 4-20 中,运行清单 4-21 中的代码。

img/502384_1_En_4_Fig20_HTML.jpg

图 4-20

使用 x,y,z,级别,标签,labcex,方法,vfont,col,lty,lwd 和 add in contour()的示例

请注意,我们选择了六个特定的级别——80、100、120、140、160 和 180。火山数据集的最小值为 94,因此从不使用 80 的等值线。此外,还使用了 Hershey 字体 serif bold,并将标签大小设置为 0.8。使用线宽 2 和点划线类型。轮廓和标签的颜色选择为深灰色。

4.4 提供关于某个图的信息或与该图进行交互的函数

本节介绍图例()、多行文字()、标识()和定位器()函数。legend()和 mtext()函数向地块添加图例和边距文本。identify()和 locator()函数使用计算机的指针与绘图交互。

4.4.1 图例( )和多行文字( )函数

当在绘图中使用不同的绘图字符、不同颜色或样式的线条或不同颜色或样式的阴影区时,通常使用图例。legend()函数在绘图上放置一个图例。有时一个来源,信用,或其他信息应该被包括在一个绘图,在页边空白处。函数的作用是:将文本放在空白处。

4.4.1.1 传奇( )函数

legend()函数有 39 个参数。前 11 个参数是 x,代表图例的 x 位置;y,表示图例的 y 位置,如果需要的话;图例,用于图例中使用的文本字符串;fill,说明是否应该在图例的关键字中使用填充框,并指定填充框中使用的颜色;col,用于线条和/或绘图字符的颜色,如果在键中使用线条和/或绘图字符;border,如果在关键字中使用了填充框,则为填充框的边框颜色;lty 和 lwd,用于线条的样式和宽度(如果在关键字中使用线条);pch,用于标绘字符,如果标绘字符在键中使用;以及角度和密度,用于填充框中线条的角度和密度(如果在关键字中使用了具有填充线条样式的填充框)。

x 参数可以采用一个元素的字符串、数值向量或两个元素的数值向量。可能的字符串有" topleft "、" top "、" topright "、" left "、" center "、" right "、" bottomleft "、" bottom "和" bottom right "--尽管字符串可以缩短为唯一标识符,例如," topl "表示" topleft "。字符串指示图例的位置。

如果 x 是一个单元素数值向量,并且 y 等于 NULL,则默认情况下 legend()绘制图例时,左上角在 x 轴上为 1,在 y 轴上为 x 值。如果 x 是两个元素的数值向量,并且 y 等于 NULL,legend()将绘制 x 轴上 1 和 2 之间以及 y 轴上 x 的两个值之间的图例。

如果 x 和 y 是单元素数值向量,默认情况下,图例的左上角位于 x 轴上,y 轴上。然后,该函数会找到好的图例尺寸。

如果 x 和 y 是二元数值向量,则这四个值定义了图例框的四个角。如果框对于图例来说太小,图例将绘制在框外。

x 参数没有默认值,y 的默认值为 NULL。

图例参数给出了图例的值。根据 legend()的帮助页,如果向量不是字符向量,legend()会尝试使用 as.graphicsAnnot()将向量转换为模式字符。向量的长度是任意的,长度给出了图例值的数量。图例没有默认值。

fill 参数接受一个任意长度的颜色值向量(参见第 3.4.1 节了解可以使用的值的类型)。如果将 fill 设置为一个值,则在图例文本的左侧绘制方框,并用由 fill 或给定颜色的填充线设置的颜色填充。这取决于是否设定了密度。如果 fill 的元素设置为 0,则相应的框是透明的。颜色循环到图例的长度。col 的默认值为 NULL。

col 参数给出了图例中使用的线条或绘图字符的颜色(代替填充框或在填充框旁边)。像 fill 一样,col 是一个颜色值的向量,长度是任意的。参数元素循环到图例的长度。值为 0 时绘制白色。col 的默认值是 par()中 col 的值。

border 参数给出填充框周围边框的颜色。该参数采用一个颜色值向量,长度和周期都是任意的。值为 0 时绘制白色。边框的默认值是“黑色”。

lty、lwd 和 pch 参数是 plot()的标准参数(参见第 3.3.2 节和第 3.4.4 节),尽管如果 pch 的元素是字符串,则字符串中的字符数可以大于 1。(注意,图例和图中使用的颜色、符号或线条之间没有内在联系。)lty、lwd 和 pch 没有默认值。

密度和角度参数用于 rect()和 polygon()(参见第 4.3.4 节。)参数采用任意长度的数值向量,并循环到 legend 的长度。密度参数以每英寸行数为单位,角度以度为单位。密度的默认值为空,角度的默认值为 45 度。

第 12 到第 16 个参数给出了图例框和边框的值。参数是 bty,代表边框的框类型;bg,为图例框的背景色;box.lty,为边框的线型;box.lwd,为边框的线宽;和 box.col,表示边框的颜色。

bty 参数采用任意长度的向量。除了“n”之外,任何值都给出一个四边的方框,对于“n”不绘制方框,也不能分配背景颜色。bty 的默认值是“o”。

bg 参数设置背景颜色,并接受任意长度的颜色值向量。仅使用第一个值。bg 的默认值是 bg 在 par()中的值。

box.lty、box.lwd 和 box.col 参数分别采用 par()中 lty、lwd 和 col 使用的类型值的向量(请参见 3.3.2 和 3.4.4 节)。仅使用向量的第一个值。默认值是 par()中 lty、lwd 和 fg 的值。

第 17 到 20 个参数影响字符和绘图字符。参数为 pt.bg,用于 pch 设置为 20、21、22、23、24 和/或 25 时的背景颜色(参见第 3.3.2 节。);cex,为图例中文字的大小;pt.cex,为键中绘图字符的大小;和 pt.lwd,用于形成绘图字符的线的宽度。

pt.bg 参数采用任意长度的颜色值向量,并循环到图例的长度。pt.bg 的默认值是 NA–这意味着背景是透明的。

cex 参数接受任意长度的数值向量。如果长度不是图例长度的等分,则会给出警告,但会打印图例。如果 cex 变化,图例符号不对齐。cex 的默认值是 1。

pt.cex 参数采用任意长度的数值向量。pt.cex 的值是绘图字符的大小。即使 pt.cex 变化,如果 cex 是单个值,图例的键也是对齐的。pt.cex 的默认值是 cex。pt.cex 和 cex 都是相对于 par()中 cex 的大小。

pt.lwd 参数采用任意长度的数值向量。这些值循环到图例的长度。pt.lwd 的默认值是 lwd 在 par()中的值。

第 21 个和第 22 个参数 xjust 和 yjust 提供了关于图例如何相对于图例的给定 x 和 y 坐标对齐的信息。如果位置由数值指定,而不是由两元素向量指定,则 xjust 和 yjust 的值仅影响图例的位置。

如果 xjust 的值大于 0.5,则将图例的中心向左移动,如果小于 0.5,则将图例的中心向右移动。值 0.5 表示图例在水平方向上以该点为中心。值 xjust 等于 0 表示图例的中心位于 x 位置右侧(0–0.5 =-0.5)图例宽度的一半处。值-1.5(-1.5–0.5 =-2)表示图例的中心在 x 位置右侧两个图例宽度处。xjust 的默认值为 0,即图例的左侧位于 x 的值处。

对于 yjust,大于 0.5 的值将图例下移,小于 0.5 的值将图例上移。0.5 再次使图例居中,这次是在 y 位置。值 1 表示图例的中心在 y 位置下半个图例高度处(1–0.5 = 0.5),依此类推。yjust 的默认值为 1,即图例顶部的位置是 y 的值。

第 23 到 28 个参数在图例框中定位文本和键,并设置文本格式。参数是 x.intersp,表示图例项和图例值之间的间距;y.intersp,表示图例中各行之间的间距;adj,用于在水平和垂直方向对齐图例文本;text.width 以 x 轴为单位的图例框文本部分的宽度,它影响框的右边框。text.col,用于图例字符串的颜色;和 text.font,用于图例字符串的字体粗细。

x.intersp 参数采用长度小于或等于 legend 长度的数值向量。争论循环往复。如果 x.intersp 的长度没有均匀地除以图例的长度,则会给出警告,但图例会出图。如果 x.intersp 比 legend 长,则会出现错误。

当 x.intersp 等于 0 且 adj[1]等于默认值时,绘图字符中心和图例文本之间的间距略大于零。对于填充框和线条,填充框右侧或线条右端与图例文本之间没有空格。x.intersp 值等于 1 会将图例文本放在填充框、线条或绘图字符右侧大约两个字符宽度的位置。值 2 给出大约四个字符宽度的空间。负值将图例文本向左移动。x.intersp 的默认值等于 1。

y.intersp 参数采用一个数值向量,其长度应为一个元素或图例的长度。长于图例长度的参数会产生错误,而那些短于图例长度且长于一个元素的参数会表现得很奇怪。

如果 y.intersp 只采用一个值,而 adj 等于默认值,则值 1 会在图例文本行之间留出大约半行高度的空间。值 2 给出大约两个线高度。值 0 覆盖这些行。负值会反转行的顺序。

如果给定 y.intersp 的一系列递增或递减值,则行距行为会发生变化。例如,如果 y.intersp 等于 0:3/3,则前两行之间的间距大约为零,第二行和第三行之间的间距大约为一行,第三行和第四行之间的间距大约为两行。此外,在框的上边框和第一行之间有一点零以上的空间,在第四行和框的下边框之间有大约一行的空间。y.intersp 的默认值是 1。

adj 参数将图例文本相对于图例行上的键放置。该参数采用一个或两个元素的数值向量。可以指定其他长度向量,甚至矩阵;但是只使用向量或矩阵的前两个值。

该函数使用 adj 的值来调整图例文本的位置。调整基于两个数字,第一个数字用于水平位置,第二个数字用于垂直位置。如果 adj 取单个元素的向量,那么第二个值设置为 0.5,adj 的单个元素的值成为第一个值。

如果 adj 的第一个值等于 0,则图例文本的左端放置在填充框和/或绘图字符中心右侧大约一个半字符宽度处。对于行,文本的左端大约是行右端右侧的一个半字符宽度。

值 0.5 将图例文本的左端放置在填充框和/或打印字符中心左侧约三分之一字符串宽度的位置。对于行,文本的左端距行的右端约为字符串宽度的三分之一。

值为 1 会将图例文字的右端放置在填充框或绘图字符中心右侧大约一个半字符宽度的位置。对于线条,图例文本的右端大约是线条右端右侧的一个半字符宽度。可以使用大于 1 小于 0 的值。

如果第二个值大于 0.5,则向下移动文本;如果小于 0.5,则向上移动文本。值 0.5 使文本(相对于填充框、绘图符号或线条)在垂直方向居中。

如果第二个值等于 1,则文本(大写字母)的顶部将在填充框、绘图字符和/或线条的中心绘图。如果第二个值等于 0,则文本底部在填充框、绘图字符和/或线条的中心绘图。大于 1 且小于 0 的值可用于 adj 的第二个值。

在接下来的三段中,我们假设 x.intersp 和 y.intersp 等于默认值。adj 的默认值是 c( 0,0.5)。

text.width 参数采用长度最多为图例长度的数值向量。值必须是非负数。如果 x 和 y 的值是二元向量,则忽略该参数,在这种情况下,图例框的宽度由 x 和 y 的值设置。

宽度以 x 轴单位测量,但从图例文本中第一个字符的右侧开始测量,而不是图例框的左侧。宽度影响图例框的宽度,但对图例没有影响,图例将在必要时打印在框外。

如果给定了多个值,legend()会为每个值绘制一个图例,但图例是不透明的,因此图例会相互重叠。也就是说,结果中值的顺序很重要。默认值为 NULL,表示 R 选择图例宽度。

text.col 和 text.font 参数采用任意长度的向量,其值的类型与 plot()中的 col 和 font 相同。这些值循环到图例的长度。text.col 的缺省值是 par()中 col 的缺省值,text.font 的缺省值是 NULL——这表示我的设备上的普通重量。

第 29 到 39 个参数给出了影响图例的一般参数,包括设置和格式化标题。参数为 merge,用于放置填充框和/或绘制字符(如果还绘制了线条);跟踪,用于调试图例代码;plot,用于是否绘制图例或返回大小;ncol,代表图例中的列数;horiz,用于是否绘制水平图例;标题,绘制一个图例标题;插入,当图例框的位置由字符串指定时,将图例从绘图边界插入;xpd,用于是否在绘图边界外扩展绘图;title.col,用于标题的颜色;title.adj,用于向左或向右调整标题;和 seg.len,用于字符宽度中的关键线长度。

merge 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。但是,如果长度大于 1,则会给出警告,并且只使用第一个值。

如果 merge 等于 TRUE,并且 lwd 和/或 lty 设置为值,并且绘制字符被绘制,则绘制字符绘制在线的中间。如果 merge 等于 FALSE,则绘制字符将绘制在线的右端。

如果同时绘制线条和填充框,并且 merge 等于 TRUE,则填充框绘制在线的左端下方。如果 merge 等于 FALSE,填充框将绘制在线的左侧,有一点重叠。

如果打印线条、填充框和打印字符这三者,并且 merge 设置为 TRUE,则填充框打印在线的左侧,而打印字符打印在线的中心。如果为 FALSE,填充框将绘制在线的左侧,而绘制字符将绘制在线的右侧。

否则,合并没有效果。注意,绘图字符和线条总是相同的颜色。merge 的默认值为 TRUE。

trace 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果跟踪的长度大于 1,则会给出警告,并且只使用第一个元素。然而,传说绘图。如果 trace 设置为 TRUE,将在 R 控制台上打印一些诊断信息。如果为 FALSE,则不会在 R 控制台上打印任何内容。

plot 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。但是,如果长度大于 1,则会给出警告,并且只使用第一个元素。

如果 plot 等于 TRUE,则绘制图例。如果为 FALSE,则不绘制图例。在这两种情况下,将函数调用设置为等于一个对象会向该对象分配一个列表,其中包含以 x 和 y 轴为单位的图例框和图例线的位置。plot 的默认值为 TRUE。

ncol 参数必须是一个值大于或等于 1 的单元素数值向量。该参数给出了图例中的列数。图例会向外扩展,以便根据需要为任意多的列腾出空间。例如,如果有四个标签并且请求了三列,则前两列各包含两个图例项,第三列不包含任何图例项。

如果该值不是一个整数,右边框会随着数字增加到下一个整数而向右移动,但是某些标签可能会在数字增加到下一个整数时才绘制。ncol 的默认值为 1。

horiz 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果长度大于 1,则会给出警告,并且只使用第一个元素。然而,传说绘图。

TRUE 值表示水平图例。FALSE 值表示垂直图例。horiz 的默认值为 FALSE。

title 参数采用一个包含图例标题或 NULL 值的单元素字符向量。默认值为 NULL。

inset 参数采用任意长度的数字向量,在图例的位置由字符串指定时使用。自变量以比例为单位进行度量,其中比例是垂直于给定轴的轴的比例。

如果位置在轴的中间,那么只使用一个元素,即使给出了更多的元素。根据插入值和垂直轴的长度,图例将从给定的轴上移开。

如果字符串指定了角位置,则在插入长度大于 1 时,使用插入的前两个元素。第一个元素给出了与纵轴的距离占横轴的比例。第二个元素给出了从水平轴到垂直轴的距离。

如果只指定了一个元素,则离轴的距离基于该比例;并且,除非图是正方形的,否则这将在两个轴上给出不同大小的插入。插入的默认值为 0。

xpd 参数是 plot()中的标准 xpd。该参数采用一个单元素逻辑向量,可以采用值 TRUE、NA、NULL 和 FALSE。如果 xpd 等于 TRUE,图例可以出图到出图区域边界。如果 xpd 等于 NA,图例可以绘制到器件边界。如果 xpd 等于 NULL 或 FALSE,legend()将在绘图边界停止绘图。xpd 参数没有默认值,这表明 xpd 是在 plot()调用中设置的值。

参数 title.col 和 title.adj 分别给出了标题的颜色和从左到右的位置。title.col 参数采用任意长度的颜色值向量(参见第 3.4.1 节)。title.col 的默认值是 text.col。

title.adj 参数采用任意长度的数字向量。如果 title.adj 等于 0,则标题绘制在左边界的右侧。如果等于 1,标题将绘制在右边框的左侧。如果等于 0.5,标题将在中心打印。负值和大于 1 的值也是可以接受的。

如果 title.adj 的长度大于 1,则标题在 adj 的每个值处绘图,并且 title.col 中的颜色循环到 title.adj 的长度。然而,与 title.adj 的值相关联的位置对于多元素向量是不同的。尽管如此,随着 title.adj 值的增加,标题的位置会向右移动。title.adj 的默认值为 0.5。

当键包含一行时,seg.len 的值给出该行的长度,并以两个字符宽度单位来度量。参数 seg.len 采用任意长度的数值向量。

如果 seg.len 大于或等于图例的长度,并且 n 是图例的长度,则 legend()为大于或等于 n 的 seg.len 的每个元素绘制一个新的图例。对于 seg.len 的多元素向量,col、lty 和 lwd 的值循环到 seg.len 的长度。如果 seg.len 小于 n,则 seg.len 的元素循环到图例的末尾。seg.len 的默认值是 2。

在清单 4-22 中,给出了使用 legend()的一些示例代码。

par( cex=0.75 )
plot(
  pop75.ordered, pop15.ordered,
  type="n",
  main="Some Examples of Using legend()"
)

legend(
  "topleft",
  legend=paste("color", 1:3 ),
  fill=grey(
    c( 0.2, 0.5, 0.8 )
  ),
  border=0,
  density=c( 20, NA, NA ),
  bg="grey95",
  box.lwd=3,
  box.lty="dashed",
  box.col="grey20",
  text.col="grey20",
  text.font=3,
  horiz=TRUE,
  title=" Example of fill",
  title.col="grey5",
  title.adj=0,
  inset=c( 0.01, 0.014 )
)

legend(
  "topright",
  legend=paste("pch", 21:23 ),
  pch=21:23,
  pt.bg="grey80",
  cex = 1.2,
  pt.cex = 1.2,
  pt.lwd = 2,
  bg="grey99",
  box.lwd=2,
  box.col="grey40",
  text.col="grey20",
  text.font=3,
  title="Example of pch",
  title.col="grey5",
  title.adj=0.5,
  inset=c( 0.01, 0.014 )
)

legend(
  0.5,
  40,
  legend=paste("lty", 1:3 ),
  col=grey(
    c( 0.2, 0.5, 0.7 )
  ),
  lty=1:3,
  lwd=1:3,
  bg="grey97",
  box.lwd=2,
  box.col="grey60",
  cex=0.95,
  text.col=grey(
    c( 0.2, 0.5, 0.7 )
  ),
  text.font=1,
  ncol=2,
  title="Example of lty, lwd & col",
  title.col="grey5",
  title.adj=1,
  seg.len=2.5
)

legend(
  c( 1, 3.5 ),
  c( 26, 33 ),
  legend=paste("example", 1:3 ),
  fill=grey(
    c( 0.7, 0.5, 0.2 )
  ),
  col=grey(
    c( 0.2, 0.5, 0.7 )
  ),
  lty=1:3,
  lwd=2,
  pch=21:23,
  bg="grey96",
  box.lwd=2,
  box.col="grey60",
  pt.bg=grey(
    c( 0.7, 0.5, 0.2 )
  ),
  pt.cex=1.2,
  text.col=grey(
    c( 0.2, 0.5, 0.7 )
  ),
  text.font=1,
  merge=FALSE,
  title="Example of Boxes, pch's, & Lines",
  title.col="grey5",
  seg.len=2.5
)

legend(
  "bottomr",
  legend=paste( "default", 1:3 ),
  fill=paste0(
    "grey",
    c(75, 60, 45 )
  )
)
par( cex=1 )

Listing 4-22Code for five examples of using legend()

在图 4-21 中,运行清单 4-22 中的代码。

img/502384_1_En_4_Fig21_HTML.jpg

图 4-21

使用 legend()的五个例子

在图 4-21 的第一个图例中,第一个填充框使用填充线而不是纯色,但是第二个和第三个使用纯色。图例是水平的,标题在左边。在右侧和上方的图例中,使用了标绘字符并填充了颜色。标题在中间。

在左边的第二个框中,线条用于表示键。所有的线条宽度、线条类型和线条颜色都不同。标题在右边,用了两栏。在左边的第三个框中,填充框、绘图字符和线条同时使用。颜色、线型、填充框轮廓和符号背景都各不相同。

在示例的右侧,显示了使用默认样式参数的图例。请注意,示例中没有使用参数 angle、bty、pt.lwd、xjust、yjust、x.intersp、y.intersp、adj、text.width、trace 和 plot。

4.4.1.2 的 mtext()函数

函数的作用是:将文本放置在图的边缘。该函数接受 10 个参数以及 par()中的许多参数。

mtext()的参数是文本,用于打印文本;side,用于绘制文本的一侧;line,表示从绘制文本的绘图中引出的线;outer,用于确定文本是放在图的外边缘还是图的边缘(在本章中,我们只讨论 outer 等于 FALSE,有关 outer 等于 TRUE,请参见 6.2.1.1 部分);at,表示放置文本的位置;adj,用于平行于轴的方向(左/右或下/上)的文本调整;padj,用于在垂直于轴的方向上调整文本;cex,为文本的字符大小;col,表示文本的颜色;和字体,表示文本的字体粗细。

文本参数采用任意长度的字符向量。文本没有默认值。

边参数采用任意长度的数字向量。如果边的元素不在 1 和 4 之间(包括 1 和 4),则不会为该元素打印文本。如果 side 的元素不是整数,则该元素被向上舍入到下一个整数。底部有 1 个边,左侧有 2 个边,顶部有 3 个边,右侧有 4 个边。side 的默认值为 3。

line 参数采用任意长度的数值向量。负值是允许的,并绘制到图中。从图中绘制出正值。0 号线刚好在地块外,在边界处。如果文本包含多行,则文本中的最后一行位于 line 的值处。line 的默认值为 0。

外部参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。outer 的默认值为 FALSE,即文本在绘图页边空白中绘图。

at 参数采用一个任意长度的数字向量,根据 side 的值,以 x 轴或 y 轴为单位进行度量。默认情况下,对于给定的边,参数给出文本开始的位置。at 的默认值为 NA,也就是说,mtext()使用 adj 的值来放置文字。

adj 参数接受任意长度的数字向量。如果未指定 at,值 0 表示文本根据 side 的值在页边距的左侧或底部打印。如果 adj 等于 1,则根据 side 的值,文本在页边距的右侧或顶部打印。如果提供了 at,adj 给出文本相对于 at 给出的位置的位置。adj 参数是连续的,可以接受负值和大于 1 的值。adj 的默认值是 NA–即使用 par()中 las 的值。

padj 参数采用与 adj 相同的值。对于等于 0 的 padj,文本的底部在线的中间,看起来垂直于轴。如果 padj 等于 1,则从垂直方向看,文本的顶部在线的中间。padj 的默认值是 NA–即使用 par()中 las 的值。

cex、col 和 font 参数是 plot()的标准参数。(参见第 3.4.3、3.4.1 和 3.4.2 节。)

mtext()的十个参数都不一定长度相同。全部循环到最长参数的长度。

在清单 4-23 中,给出了使用多行文字()的示例代码。

plot(
  pop75.ordered, pop15.ordered,
  main="Example of Using mtext()"
)

mtext(
  "Source:\nLifeCycleSavings dataset\nin the R datasets package",
  side=1,
  line=4,
  cex=0.8,
  col="grey50",
  font=2,
  adj=1
)

Listing 4-23Code for the example of using mtext()

在图 4-22 中,运行清单 4-23 中的代码。

img/502384_1_En_4_Fig23_HTML.jpg

图 4-23

清单结果 4-24 ,运行 identify()的例子

img/502384_1_En_4_Fig22_HTML.jpg

图 4-22

使用多行文字()的示例

来源引用以灰色阴影和粗体绘制。字符大小小于轴标签文本的大小。页边距文本的底线位于第 4 行。下边距默认有五行(包括第 0 行)。

4.4.2 交互函数:标识( )和定位器( )

identify()和 locator()函数使在绘图中放置图例、线条和标签等内容的任务变得更加容易。identify()函数可以使用计算机指针标记和识别散点图(以及其他类型的图)中的点。locator()函数允许用户通过使用指针将文本或图例放在绘图中的某个位置。函数 locator()也允许自由绘制线条和点。

这些函数在运行时会等待用户点击指针指定的次数。要在 Quartz 中给定次数之前退出任一函数,请按 Esc 键。对于 X11 或 Windows,使用第一个按钮以外的任何按钮单击鼠标。根据 identify()和 locator()的帮助页面,只有装有 X11、Quartz 或 Windows 的电脑才能使用这些函数。

4.4.2.1 的 identify()函数

identify()函数接受 10 个指定的参数,加上 par()中的一些参数。十个指定的参数是 x 和 y,表示散点图上的点的位置;标签,用于指定给点的标签;pos,用于是否返回标签相对于该点的位置;n 代表要标记或识别的最大点数;plot,用于绘制标签还是仅返回索引值,以及可能的位置值和选择顺序;atpen,告诉 identify()将标签绘制在所单击指针的右上方;offset,从 atpen 等于 FALSE 的点开始增加或减少标签的偏移量;公差,表示围绕一个点的圆的半径,在圆内单击将选择该点;和 order,表示是否返回选择点的顺序。

该函数总是返回所选点索引的数值向量。有时函数会将向量作为包含一个或两个以上向量的列表的第一个元素返回——这取决于 pos 和 order 的值。

x 和 y 参数可以通过以下方式输入:x 作为数值向量,y 等于 NULL;x 作为两列数值矩阵,y 等于 NULL;或者 x 和 y 作为两个等长的数值向量。x 没有默认值,y 的默认值为 NULL。

labels 参数采用一个字符向量(或可以强制为字符的向量),其长度通常等于散点图中的点数。如果不等于点数,则给出警告。默认值是 seq_along( x)。

pos 参数接受一个长度为 1 的逻辑向量(否则会给出警告)。如果设置为 TRUE,identify()将返回分配给所选点的标签的位置值向量(在 text()中使用的位置–参见第 4.2.2 节)。pos 的默认值为 FALSE。

n 参数给出了调用 identify()时可以选择的最大点数。该参数采用一个长度为 1 的数字向量(否则会给出警告)。通过限制 n,当选择了 n 个点而没有任何其他干预时,该函数将控制返回到控制台。n 的默认值是长度(x)。

plot 参数采用一个长度应为 1 的逻辑向量(或者可以强制为逻辑向量)。如果向量大于 1,则不会给出警告,但只使用第一个值。如果设置为 TRUE,则在控制返回到控制台时绘制标签。如果设置为 FALSE,则不会在图上绘制任何标签。在这两种情况下,都会返回选定点的信息,例如索引值。plot 的默认值为 TRUE。

atpen 参数采用一个长度为 1 的逻辑向量(或可以强制为逻辑向量的向量)——更长的向量不会给出警告,而是只使用第一个值。通常,identify()根据指针所单击点的周围位置,将标签绘制到点的左侧、右侧、顶部或底部。atpen 参数告诉 identify()在单击指针时将标签的左下角放在指针的位置。atpen 的默认值为 FALSE。

当 atpen 等于 FALSE 时,offset 参数以字符宽度给出标签到该点的距离。如果 atpen 为 TRUE,那么 offset 没有任何作用。偏移的默认值为 0.5。

容差参数采用长度应为 1 的数值向量。如果更长,则不会给出警告,而是只使用第一个值。该参数给出了围绕点的圆的半径(以英寸为单位),在圆内单击该半径会告诉 identify()识别并(可能)标记该点。如果指针被单击的位置附近没有足够的点,则会发出警告,但函数会继续执行-如果存在具有重叠圆的点,情况也是如此。公差的默认值为 0.25。

order 参数接受一个长度为 1 的逻辑向量(或者可以强制为逻辑向量)。如果长度大于 1,则不会给出警告,但只使用第一个元素。如果 order 设置为 TRUE,identify()返回点在选择顺序中的位置。order 的默认值为 FALSE。

在清单 4-24 中,给出了运行 identify()的代码和输出。

> plot(
pop75.ordered, pop15.ordered,
main="Example of Using identify()"
)

> identify(
pop75.ordered, pop15.ordered, labels=row.names(LifeCycleSavings)[ord],
tol=0.5,
col="grey10"
)
[1] 14 20 22 23 25

> identify(
pop75.ordered, pop15.ordered, labels=row.names(LifeCycleSavings)[ord],
tol=0.5,
pos=TRUE,
order=TRUE,
col="grey40"
)
$ind
[1] 21 24 39 41

$pos
[1] 3 2 3 3

$order
[1] 1 2 4 3

> identify(
pop75.ordered, pop15.ordered, labels=row.names(LifeCycleSavings)[ord],
tol=0.5,
atpen=TRUE,
col="grey50",
font=3
)
[1] 34 45

> identify(
pop75.ordered, pop15.ordered, labels=row.names(LifeCycleSavings)[ord],
tol=0.5,
offset=0.75,
font=2,
col="grey60"
)
[1] 42 49 50

Listing 4-24An example of using identify() multiple times

在图中,4-23 是清单 4-24 中运行的代码的结果图。

该图左上角的五个国家在第一次调用中被标记为 identify()。在第二次调用 identify 时绘制了图形下部未用斜体或粗体显示的四个国家,其中 pos 和 order 设置为 TRUE。这两个斜体国家在第三次调用 identify()时被标记,并在 atpen 设置为 TRUE 时被定位。三个加粗的国家名称是从第四次调用 identify()开始绘制的,偏移量设置为 0.75。

4.4.2.2 定位器( )函数

locator()函数有两种用法。函数可用于将 x 和 y 值输入到另一个函数中,然后该函数将信息添加到图中,或者定位器()可用于将自由曲线和/或点放入图中。

locator()函数接受 par()的两个指定参数和许多未指定参数。两个参数是 n 和 type,n 表示要使用的点数,type 表示要绘制的对象的类型。

n 参数应该是一个值大于或等于 1 的单元素数值向量。如果不是整数,该数字将向下舍入为整数。n 的默认值是 512。

参数类型是 plot()中的标准参数类型–参见第 3.3.1 节。type 的默认值为“n”,即不绘制任何内容,当 locator()仅用于设置位置时非常有用。

在清单 4-25 中,给出了一个使用 locator()将图例放置到第 4.2.1 节中最初绘制的图中的示例。

> tri1 = quantile( dpi.ordered, 0.33)
> tri2 = quantile( dpi.ordered, 0.67)

> plot(
pop75.ordered, dpi.ordered,
log="xy",
main="Example of locator()",
font.main=1,
type="n"
)

> points(
pop75.ordered, dpi.ordered,
pch=ifelse(dpi.ordered<=tri2,
ifelse( dpi.ordered<=tri1, "L", "M" ),
"H" ),
cex=0.7,
font=2
)

> legend(
locator( 1, "n" ),
legend=c(
"First Tercile of Income",
"Second Tercile of Income",
"Third Tercile of Income"),
pch=c( "L", "M", "H" ),
pt.lwd=2,
pt.cex=0.7,
cex=0.7,
bg="grey98"
)

Listing 4-25An example of using locator() to place a legend

在图 4-24 中,显示了列出 4-25 的结果。

img/502384_1_En_4_Fig24_HTML.jpg

图 4-24

清单 4-25 的结果,一个使用 locator()的例子

在清单 4-25 中,n 等于 1,所以图例左上角的位置由指针设置。参数 n 可能已被设置为 2,因此左上角和右下角都已被指针赋值。在图例()中使用 locator()时,没有其他数字是有效的。

四、plot()的方法

对于 plot()这样的函数,函数的方法是应用于特定对象类的函数版本,例如数值向量类或时间序列对象类。在本章中,我们将介绍图形和统计包中的 plot()方法,而不是 plot.default()。(函数 plot.default()是第三章的主题。)在 graphics 包中有八个 plot()方法,在 stats 包中有二十个。

5.1 方法

运行 plot()时,plot()会找到第一个参数的类,并根据该类选择要使用的 plot()方法。第一个参数是调用中列出的第一个参数——除非在调用中的其他地方有一个分配给 x 的对象(如果方法是 formula,则为 formula ),然后它成为第一个参数。如果 plot()有对象的方法,则创建一个或多个图。创建的图形基于方法,并随对象的类别而变化。

要在使用 RStudio 时查看 R 包中的 plot()方法列表,请打开右下窗格中的 Packages 选项卡并滚动到该包。打开包(单击名称)并向下滚动到 plot 在内容的字母顺序中所处的位置。plot()的方法以plot.开始,并有一个描述方法的扩展名——例如 plot.ts。

并不是所有名为plot.后跟扩展名的函数都是 plot()的方法。如果函数是一种方法,在函数的帮助页面中,在用法、下,将出现表达式图(…)(括号内的内容因方法而异)。有些帮助页面包含不止一个功能,所以在用法下可能有比 plot()更多的功能。

在 R 中,转到菜单中的 Packages & Data 选项卡,然后选择 Package Manager。向下滚动到包,打开包,然后向下滚动到绘图。并非所有包都有 plot()方法。

假设 plot()有一个对象类的方法,那么对 plot()的调用不一定包括扩展。对于某些方法,可以包含扩展。对于其他方法,包含扩展名会导致错误。在本章中,函数被称为 plot()或 plot。 ext (),其中 ext 是方法的名称。但是,关于编码,运行图。 ext ( …)有时会出错。

plot()的参数随着方法的变化而变化。在方法的 R 帮助页面上,特定于该方法的参数位于plot后的括号内。有的和 plot.default()的参数不一样,有的只是缺省值不一样。在第 5.2 和 5.3 节中,描述了帮助页面上指定的参数,并给出了参数取值的种类。每种方法都有一个或多个图形示例。

5.2 图形包中 plot()的方法

图形包是默认加载的 R 包之一。该软件包包含许多创建地块的函数和一些用于创建地块的函数。表 5-1 中给出了图形包中 plot()的方法——来自 RStudio。

表 5-1

图形包中 plot()的方法

|

功能

|

描述

|
| --- | --- |
| "plot.data.frame | 数据帧的绘制方法 |
| "plot.default | 默认散点图功能 |
| "绘图因素 | 标绘因子变量 |
| "图.公式 | 散点图的公式符号 |
| "绘图功能 | 绘制函数图 |
| "绘图.直方图 | 绘制直方图 |
| 绘图.格线 | 绘制光栅图像 |
| "绘图.表格 | 表格对象的绘图方法 |

—R 中图形包的帮助页面

数据框架法

第一个方法是 data.frame 方法,用于数据框类的对象。数据框类似于矩阵,只是列可以是不同的原子模式。由 plot.data.frame()绘制的数据框应该是带有数字列的数据框-但非数字列会转换为数字列。(数据框的模式是列表,因为矩阵不能跨列混合模式。)

根据 plot.data.frame()的帮助页面,首先使用 data.matrix()将数据框转换为数值矩阵。对于数据框中的非数值列,这些列将转换为数值列。原始数据被转换为数值,逻辑值被转换为 0 表示假,1 表示真,复数被赋予实部的值,字符值被转换为具有数值的因子。

可以使用索引选择数据框中的数字列。例如,xx[,c( 1,5,3 ) ]创建一个包含数据帧 xx 的第一、第五和第三列的数据帧。选择单个列不会生成数据框,但是通过使用仅包含一个矢量值的函数 data.frame(),数据框可以仅包含一列。例如,data.frame( xx[,2 ])将从 xx 的第二列创建一个单列数据帧。

将数据框转换为数值矩阵后,函数对()用于绘制数据框,除非数据框仅包含一列。当数据框仅包含一列时,plot()使用函数 stripchart()绘制数据框。

唯一指定的参数是 x,表示 data.frame 类的对象。x 没有默认值。

plot.data.frame()可以使用的参数是 plot.default()和 pairs()使用的参数,如果数据框包含单个列,stripchart()也可以使用这些参数。

在清单 5-1 中,给出了使用生命周期保存数据帧演示 plot.data.frame()的代码。

plot(
  LifeCycleSavings[ , 2:4 ],
  log=3,
  cex=0.5,
  main="Example of plot.data.frame()"
)

Listing 5-1Code for the example of using the data.frame method of plot given in Figure 5-1

在图 5-1 中,给出了一个在 plot()中使用数据框的例子。

img/502384_1_En_5_Fig1_HTML.jpg

图 5-1。

对数据框生命周期的中间三列运行 plot()的示例保存

从完整的生命周期保存数据集中选择了三列。请注意,第三个变量 dpi 使用对数标度。有关如何设置对数刻度的信息,请参见 pairs 的帮助页面()。

第一行中的图是 pop15 (y 轴)对 pop75 (x 轴)和 pop15 对 dpi。在第二行中,pop75 相对于 pop15 和 dpi 绘制。在第三行中,相对于 pop15 和 pop75 绘制 dpi。通过将 cex 设置为等于 0.5 来减小绘制圆的尺寸。

因素法

r 属于因子类的数据是其值分组的数据——通常这些值是设计实验中不同因子水平的名称。这些值通常是字符串,但不是必须的。factor 方法绘制的数据的参数 x 是 factor 类的向量、两列矩阵或第一列属于 factor 类的数据框。参数 y 的值是一个可选的向量,可以是 factor 或 numeric 类。

如果没有提供 y,而 x 是一个向量,则该向量被绘制成条形图,其中条形的长度是每个因子的计数(观察值的数量)。

如果 x 是矩阵,x 的第二列是数值类的向量,y 为空,则 x 的第二列是针对 x 的第一列绘制的,如果 x 是矩阵,y 是数值类的向量,则 y 是针对 x 的第一列绘制的,如果 x 是向量,y 是数值类的向量, 在所有三种情况下,如果 x 是向量,则为 x 的每个因子生成箱线图,如果 x 是矩阵,则为 x 的第一列生成箱线图。 用于箱线图的数值是与 x 的第二列或 y 中的向量相关联的值——如果 y 是给定的数值。

如果 y 是因子类的向量,或者 y 为空,并且 x 是两列都是因子类的矩阵,则两个因子向量(x 和 y,x 和 y 的第一列,或者 x 的第一列和第二列)在样条图中彼此相对绘制。样条图将第一个因子向量放在 x 轴上,将第二个放在 y 轴上。

在样条图中,对于 x 轴上的每个因子,赋予该因子的沿轴长度取决于分配给该因子的观察值的比例。在 y 轴上,对于每个 y 轴因子级别,为该因子分配一种颜色。然后在每个 x 轴因子的垂直上方绘制颜色,颜色的高度基于 y 轴因子在 x 轴因子类中的比例。

plot.factor()的指定参数是 x,对于 factor 对象(如果是矩阵,第二列可以是数值向量);y,代表可选的数字或因子向量;和 legend.text 来标记 y 轴上的因子,如果向函数提供了两个因子向量,则忽略该参数。

参数 x 可以是因子类的向量,也可以是具有两列的矩阵或数据框,其中第一列必须是因子类,第二列必须是数值或因子类。x 没有默认值。

参数 y 可以是 NULL、factor 类的向量或 numeric 类的向量。如果是向量,向量的长度必须与 x(或者 x 的行数,如果 x 是矩阵)相同。如果提供了 y 且 x 是矩阵,则只有 x 的第一列用于绘图。y 的默认值为空。

参数 legend.text 采用任意长度的字符向量(或可以强制为字符的向量)。如果 y 是一个因子,向量中的字符串循环到 y 中的因子数。如果 y 为空,x 为矩阵,x 的第二个变量为因子,则 legend.text 循环到 x 的第二个变量中的因子数。legend.text 的默认值是 y 或 x 的第二列的因子名的向量

该函数还接受 plot.default()使用的参数,以及 boxplot()、barplot()和 splineplot()的参数。

在清单 5-2 中,给出了图 5-2 中使用 plot.factor()绘制条形图、箱线图和样条图的示例代码。

img/502384_1_En_5_Fig2_HTML.jpg

图 5-2

使用 plot.factor()创建条形图、箱线图和样条图的示例

LCS = data.frame(
  dpi=dpi.ordered,
  pop75.f=cut(
    pop75.ordered,
    3,
    labels=c( "L", "M", "H" )
  ),
  pop15.f=cut(
    pop15.ordered,
    4
  ),
  sr=LifeCycleSavings$sr[ ord ]
)

plot(
  x=LCS[ ,2 ],
  y=LCS[ ,1 ],
  main="boxplot()",
  xlab="pop75 factor classes",
  ylab="dpi"
)

plot(
  x=LCS[ , 2 ],
  main="barplot()",
  xlab="pop75 factor classes",
  ylab="count"
)

plot(
  x=LCS[ , 2:3 ],
  legend.text=c("L", "ML", "MH", "H" ),
  main="splineplot()",
  xlab="pop75 factor classes",
  ylab="pop15 factor classes"
)

Listing 5-2The code to demonstrate the use of plot.factor() to create a bar plot, a boxplot, and a spline plot

在图 5-2 中,运行清单 5-2 中的代码。

请注意,函数 cut()用于将 15 岁以下人口百分比和 75 岁以上人口百分比的变量放入类中。超过 75%的百分比的标签在剪切功能中分配。使用参数 legend.text 分配 15 岁以下百分比的标签。

5.2.3 公式法

plot()的 formula 方法为 formula 类的对象创建图。formula 类的对象由函数 formula()和 as.formula()创建,或者通过显式写出公式来创建。公式中的因变量相对于公式中的每个自变量绘制,每个自变量绘制在单独的图上。绘图的类型取决于因变量的类别和自变量的类别。

该函数接受五个指定的参数以及该函数调用的任何其他方法使用的参数,如 plot.default()。五个指定的参数是 formula,用于 formula 类或显式公式的对象;数据,用于数据帧,如果使用的话;子集,用于要绘制的观察值集(在行内);ylab,代表垂直轴上的标签;并询问,如果有多个自变量,是否在进入下一个图之前暂停。

按照论点的顺序,论点…排在第三位。一般来说,在参数顺序中……之后的参数不能以缩写形式引用。

公式参数采用公式或公式类的对象。在最简单的参数形式中,公式以因变量名称开始,后跟一个波浪号,再后跟由加号分隔的自变量名称。如需更复杂的公式,请参阅公式()的说明页面。公式没有默认值。

数据参数采用矩阵、数据框或环境。如果参数是矩阵,则矩阵将被转换为数据框。然后,可以通过数据框中的变量名在公式中引用数据框中的变量。数据的默认值是 parent.frame(),在我的设备上就是会话环境。

subset 参数采用指数值的数值向量——用于绘制观察值的指数。只有子集中的观察值用于图中。子集没有默认值。

ylab 参数采用一个单元素字符向量(或可以强制为字符的向量)。ylab 的默认值是 varnames[response]–在我的设备上,它使用因变量的变量名。

ask 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。仅使用第一个值。ask 的缺省值是 dev . interactive()–在我的设备上,它的值为 TRUE,因为我可以与我的设备进行交互。

在清单 5-3 中,给出了使用 plot.formula()的示例代码。使用了所有五个参数,以及参数 l as 和 xlab。

 plot(
  dpi ~ .,
  data=LCS,
  subset=11:40,
  ylab="Disposable Income",
  ask=FALSE,
  las=3,
  xlab=""
)

Listing 5-3Code to demonstrate plot.formula() using formula, data, subset, ylab, ask, las, and xlab

在图 5-3 中,运行清单 5-3 中的代码。

img/502384_1_En_5_Fig3_HTML.jpg

图 5-3

在 plot()中使用公式、数据、子集、ylab、ask、las 和 xlab 的示例

自变量公式采用dpi ~ .的形式。因为参数数据被设置为 LCS,所以波浪号后的句点告诉 R,除了被分配的因变量之外,LCS 中的所有变量都将被用作自变量。

因为子集等于11:40,所以只绘制了中间的 30 个观察值。y 轴标签已更改为“可支配收入”。参数 ask 被设置为 FALSE,因为这些图被一起绘制在一个图形中(这是通过在 par()中设置 mfrow 来完成的,将在第 6.2.1 节中介绍)。请注意,x 标签已被取消,x 轴刻度标签垂直绘制。

这三幅图分别对应 75 岁以上人口的百分比、15 岁以下人口的百分比以及个人储蓄总额与可支配收入的比率。由于前两个变量是数据框 LCS 中的因子变量,因此前两个图包含箱线图。

5.2.4 函数法

plot()的 function 方法绘制 function 类的对象。function 类的对象要么是固定的 R 函数,要么是用 function()函数创建的。函数 plot.function()类似于函数 curve(),两个函数共享同一个帮助页面。plot.function()的参数比函数 curve()的参数简单一些,但该方法给出的结果基本相同。

plot.function()函数接受六个指定的参数以及 curve()的参数,但 curve()中的参数 expr 除外(有关 curve()参数的讨论,请参见第 4.3.2 节)。plot.function()的六个指定参数是 x,用于函数定义或函数名;y,为输入到函数中变量的起始值;to,为输入到函数中变量的结束值;from,y 的别名;xlim,代表图中 x 轴上的限值;y 轴上的标签。

x 参数可以是一个书面的函数定义(如function( z ) z +1)或一个函数的名称——包括用户定义的函数。该函数必须只有一个参数,并且必须为输入变量的每个值只返回一个值。x 没有默认值。

y、to 和 from 参数采用任意长度的逻辑、数值、复数或字符向量。向量被强制为数值模式,并且只使用第一个值。如果指定了 from,则 from 优先于 y。y 的默认值为 0,to 的默认值为 1,from 的默认值为 y。(如果在对 plot()的调用中将 from 指定为等于 y,则 plot()会在工作区中查找 y 的值;如果找不到 y,则给出一个错误。)

xlim 参数采用原始、逻辑、数值或字符模式的两元素向量。如果不是数值,向量将转换为数值模式。如果未指定 y 和 to,而 xlim 为,则 xlim 中的值用于 y 和 to。xlim 的默认值为空,即使用 y 和 to 的(可能是默认值)值作为 x 限值。

ylab 参数采用任意长度的字符向量(或可以强制为字符的向量)。ylab 的元素绘制在绘图页边空白的连续行上,从用于轴标签的默认行开始。ylab 的缺省值是 NULL–它将参数 x 的值绘制为 y 标签。

在清单 5-4 中,给出了在 plot.function()中使用 x(作为函数定义)、y、to、xlim 和 xlab 的示例代码。

plot(
  x=function( z ) z² + 2*z + 1,
  y=-5,
  to=5,
  xlim=c( -5.5, 5.5 ),
  xlab="z",
  main="Example of using x, y, to,\nxlim, & xlab in plot.function()"
)

Listing 5-4Code to demonstrate the use of x, y, to, xlim, and xlab in plot() when x is a function definition

在图 5-4 中,运行清单 5-4 中的代码。

img/502384_1_En_5_Fig4_HTML.jpg

图 5-4

在 plot()中使用 x、y、to、xlim 和 xlab 的示例,其中 x 是函数定义

请注意,y 轴标签是函数定义,因为变量 z 用于函数定义,所以 x 轴标签已更改为“z”。默认情况下,x 轴标签为“x”。xlim 的范围比 y 和 to 的范围更宽,因此抛物线不会绘制到 x 轴的极限。

直方图法

直方图是数值向量范围内落入数值类的观察值数量的图,通常宽度相等。数值变量可以在水平轴或垂直轴上。当 x 被设置为等于 histogram 类的对象或者被设置为等于具有正确直方图结构的列表时,plot()的 histogram 方法绘制直方图。histogram 类的对象是通过调用 hist()创建的。

plot.histogram()函数接受 17 个指定的参数和许多未指定的图形参数。在指定的参数中,只有三个值特定于 plot.histogram()。

前七个参数是 x,表示包含直方图规格的列表;freq,用于是否绘制频率或概率密度函数;密度,直方图矩形中每英寸的线条数,如果矩形用线条填充;角度,直方图矩形中线条的角度;col,用于直方图矩形的颜色;border,用于矩形边框的颜色;和 lty,用于矩形边界的线型。

参数 x 接受一个包含六个元素的列表。第一个元素名为 breaks,包含直方图矩形断点的递增数字向量。比矩形多一个断点。

第二个元素名为 counts,是一个数值向量,包含落在两个断点之间的观察值的数量。每个矩形应该有一个值。

第三个元素名为 density,是一个数值向量,每个矩形的值给出了矩形的高度。R 为密度计算的值是矩形的计数除以这个量:观察的总数乘以矩形的宽度。这些值具有矩形面积总和为 1 的属性,这是概率密度的一个基本属性。

第四个元素是 mids,这是矩形 x 轴中点的数值向量。第五个元素是 xname,它是一个单元素字符向量,包含为其绘制直方图的对象的名称。

第六个元素是 equidist,是一个一元逻辑向量。如果矩形的宽度都相同,则该值应为 TRUE。否则,该值应为 FALSE。

可以通过调用函数 hist()来生成 x 的适当列表,例如,通过将 x 设置为等于hist( pop75.ordered, plot=FALSE ).

第二个参数 freq 采用单元素逻辑向量。如果设置为 TRUE,计数值将用于直方图高度。如果为 FALSE,则使用密度值。

第三个到第七个参数 density、angle、col、border 和 lty 与辅助函数 rect()中的一样。更多信息见 4.3.4.1 章节。

除了标签之外,最后十个参数是 plot.default()中的标准参数,但有些参数具有特定于 plot.histogram()的默认值。对于标题、副标题、x 轴标签和 y 轴标签,参数是 main、sub、xlab 和 ylabxlim 和 ylim,用于 x 和 y 轴的限制;坐标轴,用于是否绘制坐标轴;标签,用于是否绘制以及在直方图矩形上方放置什么标签;添加,用于是否添加到现有地块;以及 ann,是否绘制标题和轴标签。有关详细信息,请参阅第 3.2.1、3.2.2 和 4.1 节或 plot.default()、title()和 axis()的帮助页面。

main 的默认值是paste( "Histogram of", paste( x$xname, collapse="\n" ) )。xlab 的默认值是x$xname。xlim 的默认值是range( x$breaks )。axes、add 和 ann 的默认值分别为 TRUE、FALSE 和 TRUE。

标签参数可以是逻辑的,也可以是任意长度的字符向量。如果设置为 TRUE 并且 freq 也设置为 TRUE,则落在矩形类中的观测值的数量(计数)将绘制在矩形的上方。

如果设置为 TRUE,freq 设置为 FALSE,则绘制在矩形上方的是矩形中的计数除以数量:观察的总数乘以矩形的宽度。结果最多保留到小数点后三位,具体取决于矩形的宽度。如果 labels 为 FALSE,则不绘制任何标签。

如果 labels 是一个字符向量,并且 labels 的长度小于矩形的数量,那么 labels 的元素循环到最后一个矩形。如果标签的长度等于或大于矩形的数量,则元素将继续在矩形中循环,直到到达标签的末尾,随着循环的继续,将已经在矩形上方的标签过度绘制。标签的默认值为 FALSE。

在清单 5-5 中,给出了运行 plot()的示例代码,其中直方图列表作为 x 的值。

pop75=hist(
  pop75.ordered,
  plot=FALSE
)

> pop75
$breaks
 [1] 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

$counts
[1]  9 11  4  4  5  7  4  4  2

$density
[1] 0.36 0.44 0.16 0.16 0.20 0.28 0.16 0.16 0.08

$mids
[1] 0.75 1.25 1.75 2.25 2.75 3.25 3.75 4.25 4.75

$xname
[1] "pop75.ordered"

$equidist
[1] TRUE

attr(,"class")
[1] "histogram"

plot(
  x=pop75,
  freq=FALSE,
  labels=c( "nine", "eleven", "four", "four", "five", "seven", "four",
    "four", "two" ),
  ylim=c( 0, 0.5 ),
  main="Example of using\nx, freq, labels & ylim in plot.histogram()"
)

box(
  bty="l"
)

Listing 5-5Code and output for an example of using x, freq, labels, and ylim in plot.histogram()

在图 5-5 中,运行清单 5-5 中的代码。

img/502384_1_En_5_Fig5_HTML.jpg

图 5-5

在 plot.histogram()中使用 x、freq、labels 和 ylim 的示例

注意,y 轴被延长了,因为 eleven 中 el 的顶部被截断,缺省值为 ylim。此外,标签以字母形式标出数字。标签的大小由内部决定。y 轴上的值是概率密度。一个 L 形的盒子被添加到绘图中。

光栅法

栅格对象用于绘制图像,由矩形网格创建,以 r 中颜色值的矢量或矩阵的形式。函数 plot()绘制栅格类的对象。raster 类的对象由函数 as.raster()创建。函数 as.raster()接受一个向量或矩阵,并根据对象中的值分配颜色值。默认情况下,as.raster()为栅格对象提供灰度。(有关详细信息,请参阅 as.raster()的帮助页面。)

使用 plot.raster()时,要绘制的矩阵或矢量必须属于栅格类。否则,什么都不会发生。在对 plot()的调用中不能进行任何注释,但是可以通过使用辅助函数来添加注释。

plot.raster()函数采用八个指定的参数,加上 plot.default()和 rasterImage()使用的未指定参数(参见第三章和第 4.2.4.2 节)。参数是 x,代表栅格对象;y,忽略不计;xlim 和 ylim,用于 x 和 y 轴的限制;xaxs 和 yaxs,用于 x 和 y 轴上的边缘间距样式;asp,为长宽比;和添加,以确定是否添加到现有地块。

x 参数接受栅格类的一个对象。x 没有默认值。

xlim 和 ylim 参数给出了绘制栅格对象的绘制区域的限制。通常 plot()只用一个;其他限值由 plot()在内部计算。轴限制可用于选择图像的一部分、调整图像的大小和/或将图像放置在图形的特定位置。xlim 和 ylim 的默认值是c( 0, ncol( x ) )c( 0, nrow( x ) )

xaxs 和 yaxs 参数如第 3.4.5 节所示。默认情况下,xaxs 和 yaxs 等于“I”,即图的边缘和图的界限之间没有边距。

asp 参数给出了 y 轴上的单位与 x 轴上的单位之比。默认情况下,asp 等于 1。也就是说,y 轴上一个单元的实际长度等于 x 轴上一个单元的长度。

add 参数告诉 plot()是添加到现有图还是创建新图。默认值为 FALSE,即创建一个新的地块。

如果光栅对象是矢量,则对象总是垂直打印。如果对象是具有一行或一列的矩阵,则垂直绘制对象。如果对象是具有一行或一列的矩阵,并且被转置,则对象被水平绘制。

用于定位栅格矩阵像元的值(x 和 y 坐标)是行和列索引值减二分之一。也就是说,对于 nr 乘 nc 光栅矩阵,图像在 x 轴上从零到 nc 绘制,在 y 轴上从零到 nr 绘制。可以设置参数 xlim 和 ylim 来影响图像在绘图区域中的位置。

绘图区域的大小由 par()的 pin 参数设置。pin 参数是一个两元素数值向量,包含绘图区域的边长(以英寸为单位)-首先给出水平边的长度,然后给出垂直边的长度。参数 pin 只能通过调用 par()来设置(参见第六章,第 6.2.1.3 节)。

光栅图像的打印方式取决于矩阵(或向量)的行和列尺寸,以及打印区域的宽度和高度之比。函数 plot()根据给定的另一个轴的界限是否在绘图区域内,计算 xlim 或 ylim 中的哪一个延伸到绘图区域的水平或垂直界限。

假设 xlim 用于 x 轴的极限。为了找到 y 轴的界限,将 x 轴的范围除以 2,然后乘以绘图区域的高度与绘图区域的宽度之比。然后将结果从 ylim 的平均值中减去并加到其上。这两个结果给出了 y 轴的极限。也就是说,y 轴上的极限等于mean( ylim )减去和加上( max( xlim ) - min( xlim ) ) / 2 * par( "pin" )[ 2 ] / par( "pin" )[ 1 ].,该过程给出了以 ylim 的平均值为中心的图像。

如果扩展了 ylim,y 轴限制由 ylim 设置。然后 x 轴极限值为mean( xlim )减和加( max( ylim ) - min( ylim ) ) / 2 * par( "pin" )[ 1 ] / par( "pin" )[ 2 ]。图像的位置也取决于参数 asp。

例如,火山数据集是一个 87 行 61 列的矩阵。每行为一个单位,每列为一个单位。假设绘图区域使得图像的顶部和底部位于绘图的边缘。也就是说,纵轴从 0 到 87。假设对于绘图区域,垂直与水平之比为 0.86。然后 87 除以 0.86 得到水平轴极限的范围。范围将是 101 个单位。对于 xlim ( c( 0, 61)))的默认值,xlim 的平均值是 30.5,因此图像在 x 轴上以 30.5 为中心,这给出了 x 轴上的下限-20 和上限 81。如果 asp 等于 1,图像不会填充到绘图的左右边缘。

为了绘制火山数据集,以便图像完全填充绘制区域,下面的代码可以工作:plot( as.raster( 250-volcano, max=195 ), asp=( par( "pin" )[ 2 ]/87 )/( par( "pin" )[ 1 ]/61 ) )。参数 asp 等于 y 轴上的单位英寸数除以 x 轴上的单位英寸数。假设绘图区域的高宽比是 0.86,对于前面的 asp 值,y 轴上的单位大约是 x 轴上的单位的大小的 0.6 倍。

在清单 5-6 中,给出了不设置和设置 asp 的示例代码。

plot(
  as.raster(
    250-volcano,
    max=195
  )
)

{ box(); axis(1); axis(2) }

title(
  "Default Plot"
)

plot(
  as.raster(
    250-volcano,
    max=195
  ),
  asp=
    ( par( "pin" )[ 2 ]/87 )/
    ( par( "pin" )[ 1 ]/61 )
)

{ box(); axis(1); axis(2) }

title(
  "asp Set"
)

mtext(
  "Default Plot & Plot with asp Set",
  outer=TRUE,
  font=1,
  side=3
)

Listing 5-6Code to plot the volcano dataset with and without setting asp in plot.raster()

在图 5-6 中,运行清单 5-6 中的代码。

img/502384_1_En_5_Fig6_HTML.jpg

图 5-6

使用 plot()绘制火山矩阵光栅图像的示例,不使用和使用 asp 设置

请注意,已将轴和框添加到绘图中,以阐明绘图在 plot.raster()中的工作方式。函数 plot.raster()绘制不带轴或注释的光栅图像。因为各个绘图区域的宽度和高度不同,所以第二个绘图没有按照矩阵的比例绘制。

图 5-7 展示了如何绘制光栅矩阵。图 5-7 的代号在清单 5-7 中给出。

img/502384_1_En_5_Fig7_HTML.jpg

图 5-7。

在 matrix volcano 上使用 plot.raster()的示例,其中 as.raster()运行 volano 的函数

plot(
  as.raster(
    1-( volcano[ 87:1, 61:1 ] - 76 )/140
  ),
  interpolate=FALSE
)

title(
  main="Example of Using plot.raster()",
  line=2.6
)

title(
  sub="The Maungawhau Volcano Data\nRows and Columns in Reverse Order",
  line=3.6,
  font=2
)

mtext(

  "S\ntop of volcano matrix",
  side=1,
  line=1
)

mtext(
  "right side\nof volano matrix",
  side=2,
  las=1,
  line=-5.9
)

mtext(
  "W",
  side=2, ,
  las=1,
  line=-7
)

mtext(
  "bottom of volcano matrix\nN",
  side=3
)

mtext(
  "left side\nof volano matrix",
  side=4,
  las=1,
  line=-5.9
)

mtext(
  "E",
  side=4,
  las=1,
  line=-7
)

Listing 5-7Code for the demonstration of plotting a raster matrix in Figure 5-7

在图 5-7 中,运行清单 5-7 中的代码。

在图 5-7 中,volcano 数据集中的矩阵已经按行和列的相反顺序排列,然后进行绘制。所以标绘矩阵的顶部是原矩阵的底部,标绘矩阵的左边是原矩阵的右边。反转是为了把北放在上面,西放在左边。

表法

表格对列中的数据进行制表或交叉制表。一个表包含数据集列内每组的观察值数量。如果有多个列,则将这些列相互交叉以找到唯一的组。表格的单元格可以包含零。表格通常与包含观测值的属性的存在、不存在或类别的测量值的数据一起使用。

plot()的 table 方法绘制 table 类的对象。table 类的对象可以通过对分类数据使用 table()函数或对数值向量、矩阵或数组使用 as.table()函数来创建。函数 table()创建一个列联表,as.table()给出一个数值模式的对象(带有非负值)table 类。

如果表格基于一个变量,函数 plot.table()会为每个类中的计数绘制条形。如果表格基于多个变量,函数将绘制变量的镶嵌图。

该函数有七个指定的变量,并接受 plot.default()使用的许多参数。参数是 x,代表表类的对象;type,为地块的类型;ylim,为 y 轴的极限;lwd,标绘线的宽度;xlab 和 ylab,用于 x 和 y 轴上的标签;和 frame.plot,用于是否在地块周围放置一个框。参数 type、ylim、lwd 和 plot.frame 仅影响单个变量的图,而不影响镶嵌图。

参数 x 可以是 table 类的任何对象。该参数没有默认值。

参数类型是 plot.default()中的标准参数,可以取值“p”、“l”、“b”、“c”、“o”、“h”、“S”、“S”和“n”。(更多信息见第 3.3.1 节。)plot.table()中 type 的默认值为“h”。

参数 ylim、lwd、xlab 和 ylab 是 plot.default()中的标准参数。(关于 ylim、xlab 和 ylab,请参见第 3.2.1 节;关于 lwd,请参见第 3.4.4 节。)ylim 的默认值等于c( 0, max( x ) )。lwd 的默认值等于 2。xlab 和 ylab 的默认值等于 NULL。

参数 frame.plot 采用任意长度的逻辑向量(或者可以强制为逻辑向量)。仅使用第一个值。如果设置为 TRUE,且图为条形,参数 bty 可用于设置方框类型(参见第 3.2.2 节)。frame.plot 的默认值是 is . num–当变量名可以强制为数字时,该值为 TRUE。否则,该值为 FALSE。

在清单 5-8 中,给出了使用 x、ylim、lwd、lend、main、xlab、ylab、frame.plot 和 bty 绘制单变量和双变量列联表的示例代码。

LCSf = data.frame(
  apply(
    LifeCycleSavings,
    2,
    cut,
    breaks=3,
    labels=c( "few", "half", "many" )
  )
)

plot(
  table( LCSf$pop15 ),
  lwd=10,
  lend=1,
  ylim=c( 0, 25 ),
  frame.plot=TRUE,
  bty="l",
  main="One Variable",
  xlab="pop15 factors",
  ylab="count"
)

plot(
  table(
    LCSf$pop15,
    LCSf$pop75
  ),
  main="Two Variables",
  xlab="pop15 factors",
  ylab="pop75 factors"
)

mtext(
   "Example of using x, lwd, ylim,\nframe.plot, bty, main, xlab, and ylab in plot.table()",
   outer=TRUE,
   side=3
)

Listing 5-8Code for the example, in Figure 5-8, of plotting single-variable and two-variable contingency tables with plot(), using x, ylim, lwd, lend, main, xlab, ylab, frame.plot, and bty

在图 5-8 中,运行清单 5-8 中的代码。

img/502384_1_En_5_Fig8_HTML.jpg

图 5-8

在对 plot.table()的两次调用中使用 x、ylim、lwd、lend、main、xlab、ylab、frame.plot 和 bty 的示例

请注意,在第一个图中,条形和轴之间有一个空间。将 xaxs 设置为“I”会将轴向上移动到 0°并消除间隙。此外,对于条形,lwd 设置为 10,lend 设置为方形线端。默认情况下会给出圆形线端。由于 frame.plot 在第一个绘图中被设置为 TRUE,所以对于 L 形的盒子,盒子类型被设置为“L”。

5.3 stats 包中 plot()的方法

stats 包中的 plot()函数的方法用于绘制用于统计分析的各种函数的输出。例如,有线性回归、树状图和主成分分析的方法。stats 包中总共有 20 种方法用于 plot()。

表 5-2 中给出了 stats 包中 plot()的方法。该表来自 r。

表 5-2

R stats 包中 plot()的方法

|

功能

|

描述

|
| --- | --- |
| "plot.acf | 绘制自协方差和自相关函数 |
| "plot.decomposed.ts | 通过移动平均线进行传统季节性分解 |
| "plot.dendrogram | 一般树形结构 |
| "图幅密度 | 核密度估计的绘图方法 |
| "plot.ecdf | 经验累积分布函数 |
| "plot.hclust | 层次聚类 |
| 绘图。HoltWinters | 霍尔特温特斯对象的绘图函数 |
| 绘图. isoreg | iso reg 对象的绘图方法 |
| "剧情 | 绘制 lm 对象的诊断图" |
| 绘图. ppr | 为投影寻踪回归拟合绘制脊函数 |
| "plot.prcomp | 主成分分析 |
| "绘图.原理组件 | 主成分分析 |
| "plot.profile.nls | 绘制一个 profile.nls 对象" |
| "plot.spec | 绘制光谱密度" |
| " plot . spec . coherence | 绘制光谱密度" |
| 绘图。stepfun | 绘图步骤功能 |
| "plot.stl | STL 对象的方法 |
| "剧情 | 绘制时间序列对象 |
| 绘图. tskernel | 平滑内核对象" |

—R 中 stats 包的帮助页面

本章涵盖了表中的每种方法。给出了方法的实例。

acf 方法

自相关和自协方差图以及部分自相关和部分自协方差图(或互相关和互协方差图)用于时间序列分析,以直观地评估数字向量内的自相关量(或两个向量的互相关)。通常,向量包含在时间或空间上等距的观测值。

plot()的 acf 方法绘制 acf 类的对象。acf 类的对象是由函数 acf()、pacf()和 ccf()创建的。函数 acf()、pacf()和 ccf()计算并绘制数字(通常是时间序列)向量或矩阵(即数字类或模式(通常是 ts 类)的对象)的自相关和自方差(acf())、部分自相关和部分自方差(pacf())以及互相关和互协方差(ccf())。

plot.acf()函数接受 17 个指定的参数,加上 plot.default()接受的许多参数。前九个参数是 x,表示 acf 类的对象;ci,表示绘制的置信区间的置信水平;type,为绘图类型;xlab 和 ylab,用于 x 和 y 轴上的标签;ylim,代表 y 轴上的极限;main,为剧情标题;ci.col,用于置信区间颜色;ci.type 表示置信区间的类型。

x 参数接受 acf 类的一个对象。x 没有默认值。

ci 参数采用一个数值向量,其元素大于或等于零且小于一。为每个值绘制置信区间。值 0 抑制置信区间。ci 的默认值为 0.95。

类型参数是 plot.default()中的标准参数(参见第 3.3.1 节)。类型的默认值是“h”。

xlab、ylab、ylim 和主参数是第 3.2.1 节中的标准参数。xlab 的默认值为“滞后”。ylab、ylim 和 main 的默认值为空。

ci.col 参数采用任意长度的颜色值向量(参见第 3.4.1 节)。颜色按以下方式循环:第一种颜色被分配给零线上的第一条置信水平线。第二条到第二条置信水平线。依此类推,直到零以上的所有线条都被赋予一种颜色。然后,从最接近零的行开始,为低于零的行分配颜色。ci.col 的默认值是“蓝色”。

ci.type 参数采用 NULL 或一个单元素字符向量,该向量可以采用值“white”或“ma”。值 NULL 和“白色”告诉 plot 使用误差是白噪声的假设来生成置信区间,多个区间不会导致问题。

值“ma”告诉 plot()假设一个移动平均时间序列,该时间序列的阶数比正在计算的滞后小一(请参阅 plot.acf()的帮助页)。如果 ci.type 等于“ma ”,则只能计算一个间隔。ci.type 的默认值为c("white", "ma"),即使用“白色”。

第 10 到第 16 个参数用于简化具有多个时间序列的 acf 对象的绘制。这些参数无法更改——至少在我的设备上无法更改。

七个参数分别是 max . m flow,告诉 plot()如果有多个系列,一页要绘制多少个系列;ask,告诉 plot()在进入新的绘图页面之前是否要求用户做出响应;mar,用于设置图的边距;oma,用于设置页面的外部边距;mgp,用于设置轴标签和字幕绘制的行;xpd,用于是否扩展绘图区域;和 cex.main,用于打印标题的字符大小。包含这些参数是因为这些参数在 plot.acf()中具有特殊的默认值。

对于 max . m flow,该值为 6,每页最多 36 个图–6 行 6 列。(mfrow 参数包含在 6.2.1.5 一节中。)

对于 ask,默认值为Npgs > 1 && dev.interactive(),即如果页面不止一个,且设备允许与用户交互,那么 ask 设置为 TRUE。否则,问的就是假的。

对于 mar、oma 和 mgp,如果时间序列的数量少于 3,则参数采用 par()中的相应值。否则,相应的值为c(3, 2, 2, 0.8)c(1, 1.2, 1, 1)c(1.5, 0.6, 0)。mar 和 oma 包含在 6.2.1.1 和 6.2.1.2 章节中,mgp 包含在第 4.1 节和第 4.2.1 节中。

参数 xpd 采用 par()中 xpd 的值。如果时间序列的数量大于 2,则参数 cex.main 的值为 1。否则,cex.main 在 par()中具有 cex.main 的值。

第 17 个参数是 verbose,表示要返回的信息的级别。缺省值是 options()中 verbose 的值——在我的设备上是 FALSE(通过运行getOption( "verbose" )找到)。

第三章中 plot.default()的大部分参数都可以设置。但是,不能设置 font.main、col.main 和 cex.main。

对于图 5-9 中的示例,使用数据集包中的数据集黑子.年。这些数据从 1700 年到 1988 年,是一年中每日太阳黑子数的平均值。目前,其来源是比利时皇家天文台的 WDC-SILSO。

img/502384_1_En_5_Fig9_HTML.jpg

图 5-9

使用 plot()绘制 acf()、pacf()和 ccf()输出的示例。第一个图是 acf()的输出,第二个是 pacf()的输出,第三个是 ccf()的输出。设置了参数 x、ci、type、ci.col、ci.type 和 main

在清单 5-9 中,给出了 plot()示例中使用的代码,使用了 acf()、pacf()和 ccf()的输出。

par(
  oma=c( 1, 1, 3, 1),
  mfrow=c( 3, 1 )
)

acf.m=acf(
  sunspot.year,
  lag=150
)

pacf.m=pacf(
  sunspot.year

,
  lag=10
)

ccf.m=ccf(
  sunspot.year[ 1:278 ],
  sunspot.year[ 12:289 ],
  lag=150
)

plot(
  acf.m,
  ci=c( 0.966 ),
  type="l",
  ci.col=grey( 0.4 ),
  ci.type="ma",
  main="ci=c(0.966), type=\"l\", ci.col=grey(0.4), ci.type=\"ma\""
)

plot(
  pacf.m,
  ci=c( 0.8, 0.966 ),
  type="h",
  ci.col=grey(
    c(0.4, 0.6)
  ),
  ci.type="white",
  main="ci=c(0.8,0.966), type=\"h\", ci.col=grey(c(0.4,0.6),  ci.type=\"white\""
)

plot(
  ccf.m, ci=c( 0.8, 0.966 ),
  type="h",
  ci.col=grey(
    c( 0.4, 0.6 )
  ),
  ci.type="white",
  main="ci=c(0.8,0.966), type=\"h\", ci.col=grey(c(0.4,0.6)), ci.type=\"white\""
)

mtext(
  "Examples of Using ci, type, ci.col, and ci.type in plot.acf()",
  outer=TRUE,
  line=1
)

par(
  oma=c( 0, 0, 0, 0 ),
  mfrow=c( 1, 1 )
)

Listing 5-9Code for the examples of plotting output from acf(), pacf(), and ccf() using plot(). The arguments x, ci, type, ci.col, ci.type, and main are set

在图 5-9 中,运行清单 5-9 中的代码。

太阳黑子的已知周期略小于 11 年。在第三张图中,给出了滞后 11 年的太阳黑子系列和当前太阳黑子系列之间的交叉相关性——这只是一个例子。注意,对于第一个和第三个图,滞后超过 150 年,对于第二个图,滞后超过 10 年。

对于第一个图,类型设置为“l”——对于线形图。在第二个和第三个图中,类型设置为“h”——对于直方图(默认值)。对于第一个图,ci.type 设置为“ma”,代表移动平均,因此只能计算一个置信区间。在第二个和第三个图中,ci.type 取值“white ”,表示白噪声,因此可以计算两个置信区间。

5.3.2 分解. ts 方法

对于具有趋势的季节性时间序列数据,可以将时间序列分解为三个时间序列。这三个时间序列给出了数据中的趋势、基于时间序列的给定频率的数据的季节成分,以及通过从原始序列中减去组合的趋势和季节成分而得到的残差。

plot()的分解的. ts 方法绘制分解的. ts 类的对象。分解. ts 类的对象是由分解()函数创建的。decompose()函数使用自回归方法,根据时间序列的频率对时间序列进行分解。

该分解返回一个列表,其中包含原始数据、数据趋势、数据的季节性成分、数据的随机成分以及分解类型。函数 plot()将列表的前四个元素绘制在四个单独的图中,并在标题中给出了分解类型。

plot.decomposed.ts()的帮助页面和 decompose 的帮助页面是同一个页面。但是在帮助页面的用法下没有函数 plot(),所以没有设置具体的绘图参数。

对于时间序列,函数 decompose()接受三个参数 x;type,为分解的类型;和筛选器,手动输入数值以筛选季节性组件。

x 参数是时间序列,并接受 ts 类的一个对象。时间序列的频率必须大于或等于 2。x 的值可以包含多个时间序列,但 plot()在多个时间序列的情况下性能不佳。x 没有默认值。

类型参数采用一个值为“加法”或“乘法”的单元素字符向量。如果类型等于“加法”,则使用加法模型。如果 type 等于“乘法”,则使用乘法模型。(字符串“加法”和“乘法”可以被缩短,但仍然可以被分解()识别。)type 的默认值为c("additive", "multiplicative"),即使用加法方法。

filter 参数采用长度小于以下量的数值向量:2 加上时间序列的长度减去时间序列的频率。过滤器应该与时间顺序相反。如果 filter 的值为 NULL,则使用对称移动平均模型来查找季节性成分。过滤器的默认值为空。

对于由 decompose()创建的对象,不能在对 plot()的调用中对 main、sub 和 ylab 进行更改,但可以设置 xlab。第三章的其他大部分参数都可以设置。但是,不能设置绘图字符的字体粗细。可以设置 family 参数和其他字体参数。辅助函数 mtext()可用于将关于绘图的信息放到图形上。

有关更多信息,请参见分解()的帮助页面。在清单 5-10 中,给出了图 5-10 中一起使用 plot()和 decompose()的示例代码,设置了 lwd、lty、col 和 xlab。

img/502384_1_En_5_Fig10_HTML.jpg

图 5-10

一起使用 plot()和 decompose()的示例。设置 plot()、lwd、lty、col 和 xlab 的参数

plot(
  decompose(
    ts(
      sunspot.year,
      freq=11
    ),
    type="mult"
  ),
  lwd=2,
  lty=3,
  col=grey( 0.25 ),
  xlab="Eleven Year Cycles"
)

mtext(
  "The sunspot.year Dataset - Yearly Data: 1700 to 1988",
  side=1,
  line=3.7,
  font=3
)

Listing 5-10Code for the example of running plot() and decompose() together – lwd=2, lty=3, col=grey( 0.25 ), and xlab=”Eleven Year Cycles”

在图 5-10 中,运行清单 5-10 中的代码。

请注意,只有 x 轴标签可以更改,而 mtext()用于包含有关数据集的信息。使用线宽 2 和线型“虚线”。图中的颜色是灰色(0.25)。分解的方法是乘法。

树状图法

树状图是一种对数据集进行聚类的方法。数据集中的观察值根据数据集中变量的值分组在一起。数据集的行通常被命名为。plot()的树状图方法绘制树状图类的对象。引用 R

中树状图的帮助页面,树状图直接表示为嵌套列表,其中每个组件对应于树的一个分支。

—R 中树状图的帮助页面

在树状图的帮助页面中给出了具有树状图类的列表结构。通过运行 as.dendrogram(),可以将适当结构的对象(例如,hclust()的输出)转换为 dendrogram 类。

树状图是由分支成新线条的线条组成的。线条分支的地方就是节点。最后的树枝是叶子。节点和叶子都可以被标记。

plot.dendrogram()函数接受 16 个指定的参数和 plot.default()使用的许多参数。前八个参数采用特定于该方法的值。八个参数是 x,代表树图类的对象;type,表示要绘制的树状图的类型;中心,表示沿分支起始线的节点位置;edge.root,用于是否在第一行之上放置分支;nodePar,用于节点的属性;edgePar,用于组成树的线条的属性和用于标记节点的任何文本;leaflab,用于是否绘图以及如何定位叶子的标签;以及 dLeaf,用于树和叶标签之间的距离。

x 参数接受一个 dendrogram 类的对象。x 没有默认值。

类型参数是一个字符向量,可以取两个值之一,即“矩形”或“三角形”。选择“矩形”绘制矩形树。选择“三角形”绘制三角形树。默认值是c( "rectangle", "triangle" ),,它给出了一个矩形树。

中心参数采用单元素逻辑向量(或者可以强制为逻辑向量)。值 TRUE 告诉 plot()使用叶子的位置来定位线上的节点。值 FALSE 告诉 plot()将节点定位在包含该节点的直线的中心。TRUE 的选择给出了一个更窄的绘图。默认值为 FALSE。

edge.root 参数采用一个元素逻辑向量(或可以强制为逻辑向量的向量)。TRUE 值告诉 plot()在第一行绘制分支。值 FALSE 告诉 plot()不要绘制分支。默认值为is.leaf(x) || !is.null( attr(x, "edge.text" ) )

nodePar 参数接受一个列表(如果使用的话),否则接受 NULL 值。参数告诉 plot()在节点和叶子上绘制什么。列表中最多可以有五个元素,分别命名为以下之一:pch、col、cex、xpd 或 BG–标绘字符、标绘字符的轮廓颜色、字符大小、扩展选项以及标绘字符 21–25 的填充颜色(参见第 3.2、3.3 和 3.4 节)。

列表的元素可以有一个或两个值。如果一个值为 long,则该属性将应用于节点和叶子。如果有第二个值,第一个值影响节点,第二个值影响叶子。nodePar 的缺省值是 NULL,也就是说,不要注释节点。

如果使用了 edgePar,则 edgePar 参数接受一个列表,否则接受 NULL 值。该列表最多有七个元素,每个元素都被命名为下列之一——col、lty、lwd、p.col、p.lty、p.lwd 和 t.col。

每个元素可以有一个或两个值。如果只提供了一个值,根据该值的名称,该设置将应用于所有线、节点标签多边形或节点标签。如果提供了两个值,第一个值应用于所有节点,一直到叶子的线,而第二个值应用于叶子和叶子的线。

名为 col、lty 和 lwd 的值应用于构成树的线,并且是 plot.default()的标准 col、lty 和 lwd。名为 p.col、p.lty 和 p.lwd 的值会影响围绕节点标签绘制的多边形(如果节点已被标记),其作用类似于标准的 col、lty 和 lwd。

如果节点被标记并接受颜色值,则名为 t.col 的值给出文本的颜色。edgePar 的默认值是 list()-即线段和多边形是黑色的,实线宽度为 1,文本是黑色的。

leaflab 参数采用一个字符向量,该向量具有三个可能值之一:“垂直”、“类文本”或“无”。如果值为“垂直”,则垂直于树绘制叶标签。如果 leaflab 设置为“textlike ”,叶子标签将平行于树以多边形绘制。如果设置为“无”,则不打印标签。leaflab 的默认值是 c(“垂直”、“类文本”、“无”),即垂直绘制标签。

dLeaf 参数采用任意长度的数字向量。如果 dLeaf 大于 1,则每个标签被绘制 n 次,其中 n 是 dLeaf 的长度,每次绘制的距离由 dLeaf 中的相应值给出。通常,在 dLeaf 中只使用一个值。要看到 dLeaf 的效果,需要一个较大的值(如 100)。dLeaf 的缺省值是 NULL–这在垂直于阅读的方向上给出了大约四分之三字符大小的空间(平行于树的文本的高度和垂直于树的文本的宽度)。

plot.dendrogram()的第九到第十六个参数是 xlab 和 ylab,用于 x 和 y 轴标签;xaxt 和 yaxt,用于 x 和 y 轴类型;horiz,为树的方位;frame.plot,用于是否框住绘图;和 y 轴极限的 xlim 和 ylim。大多数参数都是 plot.default()的标准参数,但具有与 plot.default()不同的默认值。

xlab 和 ylab 参数接受任意长度的字符向量。参数的默认值是“”。

xaxt 和 yaxt 参数接受任意长度的字符向量。仅使用第一个元素,其值必须为“s”、“l”、“t”或“n”。前三个值给出了相同的结果-标准轴。值“n”抑制轴。xaxt 的默认值是“n ”, yaxt 的默认值是“s”。

horiz 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果长度大于 1,则会给出警告,并且只使用第一个值。如果设置为 TRUE,则绘制水平方向的树。如果为 FALSE,则绘制垂直方向的树。默认值为 FALSE。

frame.plot 参数是任意长度的逻辑向量(或者可以强制为逻辑向量)。如果 frame.plot 的值长于一个元素,则仅使用第一个元素并给出警告。如果设置为 TRUE,将在树周围绘制一个框。如果设置为 FALSE,则不绘制任何框。默认值为 FALSE。

xlim 和 ylim 参数接受长度为 2 的数值向量。x 和 y 的最大值是通过在 R 提示符下输入树状图找到的。给出了最大值。例如:

> as.dendrogram( hclust( dist( LifeCycleSavings[ , 2:4 ] ) ) )
'dendrogram' with 2 branches and 50 members total, at height 3912.968.

例如,有 50 片叶子,叶子的 x 值从 1 到 50。还有,给定的身高是 3912.968,所以 y 的最大值是 3912.968。y 的最小值是 0。xlim 和 ylim 没有缺省值,R 选择合适的值。

在清单 5-11 中,给出了图 5-11 中使用 plot()绘制树状图类对象的示例代码。dist()、hclust()和 as.dendrogram()中使用了默认值。plot()中设置的唯一参数是轴。

img/502384_1_En_5_Fig11_HTML.jpg

图 5-11

使用 dist()、hclust()和 as.dendrogram()的默认值创建和绘制树状图的示例。plot()参数轴设置为 FALSE

par(
  mar=c( 7, 0, 4, 0 ) + 0.1
)

plot(
  as.dendrogram(
    hclust(
      dist(
        LifeCycleSavings[ , 2:4 ]
      )
    )
  ),
  axes=FALSE
)

title(
  main="50 Countries: Average Over Years 1960 to 1970 of
Disposable Income, Population Under 15, and Population Over 75
Euclidean Distance used in dist()",
  font.main=1
)

par(
  mar=c( 5, 4, 4, 2 ) + 0.1
)

Listing 5-11Code for the example of using plot() to plot an object of the dendrogram class. The argument axes is set to FALSE

在图 5-11 中,运行清单 5-11 中的代码。

图的底部边缘增加了两行,以容纳叶子上的标签。绘图的左右边距减少到 0.1 行宽。绘图后,页边距被重置为默认值。左轴被抑制。

密度法

概率分布函数,也称为概率密度,是推断统计学的基础。有许多基于数学函数的概率密度。通过估计数学函数的参数来估计密度。密度函数也可以直接从数据中估计出来。plot()的密度方法绘制直接从数据估计的概率密度。概率密度具有曲线下的面积等于 1 的性质。

plot()的 density 方法绘制密度类的对象。density 类的对象由 density()函数创建。density()函数使用密度估计的核方法来估计概率密度。

plot.density()函数接受六个指定的参数以及 plot.default()使用的许多参数。六个参数是 x,代表 density()的输出;main、xlab 和 ylab,用于标题以及 x 和 y 轴标签;type,为绘图类型;以及 zero.line,用于确定是否在 y 等于零处绘制一条线。

x 参数接受密度类的对象。x 没有默认值。

main、xlab 和 ylab 参数接受任意长度的字符向量。main 的默认值为 NULL,plot()将 x 的值绘制为标题。对于 xlab,缺省值是 NULL,观察的数量和内核带宽被绘制为 x 轴的标签。对于 ylab,默认值为“密度”。

type 参数是 plot.default()中的标准参数。在 plot.density()中,默认值为“l”,即绘制一条线。

zero.line 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果长度超过一个元素,则只使用第一个元素并给出警告。如果设置为 TRUE,plot()应在 y 等于 0 处画一条线。在我的设备上,没有绘制线。默认值为 TRUE。

在列表 5-12 中,代码给出了一个在 plot.density()和 density()中使用默认值的例子。

plot(
  density(
    pop75.ordered
  )
)

Listing 5-12Code for the example given in Figure 5-12 of using the defaults in plot.density() and density() to plot an estimated probability density of the variable pop75.ordered

在图 5-12 中,运行清单 5-12 中的代码。

img/502384_1_En_5_Fig12_HTML.jpg

图 5-12

使用 plot.density()和 density()的默认值绘制变量 pop75.ordered 的估计概率密度的示例

请注意,即使 zero.line 的默认值为 TRUE,也不会在 y 等于 0 的位置绘制直线。

ecdf 方法

相对于 x 绘制的累积分布函数是概率密度函数从负无穷大到 x 的积分。累积分布函数的值从零到一,并且该函数不递减。(根据概率密度的潜在度量,在真实线和计数度量的某种组合上进行积分。)

plot()的 ecdf 方法绘制 ecdf 类的对象。ecdf 类的对象是由 ecdf()函数创建的。ecdf()函数从一个数字向量中创建一个经验累积密度函数。经验累积密度函数是一个非减函数,在数据范围内从 0 到 1 步进。该函数在有数据点的地方逐步增加。

在 ecdf()中,数据是一个数值向量(或者是一个可以被强制为数值向量的对象),并且在创建 step 函数之前在内部进行排序。有关更多信息,请参见 ecdf()的帮助页面。

plot.ecdf()函数接受五个指定的参数以及 plot.stepfun()函数使用的参数。五个指定的参数是 x,表示 ecdf 类的对象;ylab,为 y 轴标签;垂直,用于是否绘制步骤的垂直部分;col.01line,用于 y 等于 0 和 1 的线条颜色;和 pch,用于每步顶部的绘图字符。按照参数的顺序,…是第二个参数。

x 参数接受 ecdf()类的一个对象。x 没有默认值。

ylab 参数是 plot.default()中的标准参数。plot.ecdf()中 ylab 的默认值是“Fn(x)”。

verticals 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果长度超过一个元素,则只使用第一个元素并给出警告。如果设置为 TRUE,将绘制台阶的垂直部分。如果为 FALSE,则不绘制垂直部分。verticals 的默认值为 FALSE。

col.01line 参数采用任意长度的颜色值向量(参见第 3.4.1 节了解颜色值的种类)。如果 col.01line 的长度大于 2,则仅使用第一个和第二个值。如果只有一种颜色,零线和单线都是给定的颜色。否则,零线取第一种颜色,单线取第二种颜色。ecdf()中的默认值是“gray70”。

pch 参数采用任意长度的绘图字符值向量(见第 3.3.2 节),是 plot.default()中使用的标准参数。pch 值在绘制的点上循环。在 plot.ecdf()中,pch 的默认值是 19。

在清单 5-13 中,针对图 5-13 中的例子给出了一行代码。使用 ecdf 对象运行函数 plot(),并设置参数 verticals、col.01line、pch 和 cex。

img/502384_1_En_5_Fig13_HTML.jpg

图 5-13

运行 plot.ecdf()和 ecdf()的示例,verticals=TRUE,col.01line=grey( c( 2,4 )/10),pch= "。",并且在 plot.ecdf()中 cex=4

plot(
  ecdf(
    pop75.ordered
  ),
  verticals=TRUE,
  col.01line=grey(
    c( 2, 6 )/10
  ),
  pch=".",
  cex=4
)

Listing 5-13Code to demonstrate plot.ecdf() with verticals, col.01line, pch, and cex set

在图 5-13 中,运行清单 5-13 中的代码。

请注意,1 处的线条比 0 处的线条更亮。此外,实线从 y 等于 0 时的分布延伸到左侧,从 y 等于 1 时的分布延伸到右侧。将 pch 设置为“”。增加 cex 是一种绘制小点的有效方法——如图所示。

5 . 3 . 6 hclust 方法

分层聚类是一种根据与观察值相关的变量数据集将观察值归入聚类的方法。plot()的 hclust 方法绘制 hclust 类的对象。hclust 类的对象由 hclust()函数创建,或者通过在具有适当结构的对象上运行 as.hclust()来创建。(hclust()和 as.hclust()的帮助页面提供了结构和其他信息。)函数 hclust()进行层次聚类。

plot.hclust()函数接受 11 个指定的参数以及 plot.default()使用的许多参数。指定的参数是 x,代表 hclust 类的对象;标签,用于树上叶子的标签;挂,为树枝的长度,即树枝到叶子的长度;check,检查 x 是否具有有效的格式;以及来自 plot.default()的标准轴、frame.plot、ann、main、sub、xlab 和 ylab–具有特定于 plot.hclust()的默认值。

x 参数接受 hclust 类的一个对象。x 没有默认值。

labels 参数采用一个字符向量(或可以强制为字符的向量),该向量必须为 NULL、FALSE 或长度等于被聚类的观察值的数量。如果 labels 等于 NULL,plot.hclust()使用观察的行名作为标签(如果行名存在),否则使用观察的索引号。如果 labels 等于 FALSE,则不绘制任何标签。否则,将绘制给定的标签。标签的默认值为空。

hang 参数采用任意长度的数字向量。仅使用第一个值。“悬挂”的负值会导致所有叶子在零线处结束,并且所有标签在零线下方的恒定距离处排成一行。

值 0 告诉 plot()使用零长度的叶子。最终的叶子位置可以在不同的高度。随着悬挂的增加,叶子的长度与悬挂的大小成比例增加。当 hang 等于 1 时,树叶的长度加上从树叶末端到标签的距离等于 y 轴的长度。悬挂的默认值为 0.1。

check 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。仅使用第一个值。如果设置为 TRUE,plot.hclust()检查 x 的结构是否是有效的 hclust 类结构。如果设置为 FALSE,则该函数不进行检查。默认值为 TRUE(有关更多信息,请参见 hclust()的帮助页面)。

轴的默认值为 TRUE,即绘制轴。frame.plot 的默认值为 FALSE,即在绘图区域周围不绘制任何框。ann 的默认值为 TRUE,即绘制标题和轴标签。main 的默认值是“聚类树状图”。sub 和 xlab 的默认值为 NULL。ylab 的默认值是“高度”。

在清单 5-14 中,给出了使用 plot()和 hclust 类 x 值的示例代码。设置了参数 labels 和 hang。

plot(
  hclust(
    dist(
      pop75.ordered
    )
  ),
  labels=row.names( LifeCycleSavings )[ ord ],
  hang=0
)

Listing 5-14Code for the example in Figure 5-14 of using plot() with an hclust class x value. The arguments labels and hang are set

在图 5-14 中,运行清单 5-14 中的代码。

img/502384_1_En_5_Fig14_HTML.jpg

图 5-14

使用 plot.hclust()、hclust()和 dist()的示例,标签和悬挂在 plot.hclust()中设置,默认值在 hclust()和 dist()中使用。数据来源是 R datasets 包中的 LifeCycleSavings 数据集

请注意,该聚类不同于第 5.3.3 节中的树状图聚类。在图 5-14 中仅使用了生命周期节约数据集的一列,而在图 5-11 中使用了三列。在前面的图中,hang 设置为 0,因此树叶的长度为零。

霍尔特温特斯法

霍尔特-温特斯滤波是一种用于时间序列数据建模的技术。plot()的 HoltWinters 方法绘制 HoltWinters 类的对象。HoltWinters 类的对象是通过运行函数 HoltWinters()创建的。函数 HoltWinters()对频率大于或等于 2 的时间序列对象执行 Holt-Winters 过滤。Holt-Winters 模型的观察值和拟合值绘制成图()。预测未来的值也可以绘制出来,有或没有置信区间。

函数图。HoltWinters()接受 15 个指定的参数,以及 plot.default()的许多参数。前四个参数是 x,表示要绘制的 HoltWinters 类的对象;预测值,用于绘制未来的预测值;区间,用于计算预测值时是否包括置信区间;和分隔符,用于是否在图的观察值和拟合值部分与图的预测值和置信区间部分之间绘制垂直线。

x 参数接受 HoltWinters 类的一个对象。x 没有默认值。

predicted.values 参数可以接受两种值,NA 或 predict()函数的输出,其中 HoltWinters 类的对象是 predict()中的模型。要查找的未来时间段数必须包含在对 predict()的调用中。如果要绘制置信区间,则必须在 predict()中设置是否包含置信区间。(参见预测的帮助页面。HoltWinters()了解更多信息。)predicted.values 的默认值为 NA,即不绘制预测值或分隔线。

intervals 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。仅使用第一个值。如果 intervals 设置为 TRUE,并且已经计算了预测值并使用置信区间进行了计算,则绘制置信区间。否则,不会绘制置信区间。间隔的默认值为 TRUE。

separator 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。仅使用第一个值。如果设置为 TRUE 并且已经计算出预测值,则绘制分隔线。否则,不会绘制任何线。separator 的默认值为 TRUE。

第五到第十二个参数是 col、col.predicted、col.intervals、col.separator、lty、lty.predicted、lty.intervals 和 lty.separator。前四个参数分别指定观察线、拟合值线、预测值线和分隔线的颜色。这四个参数采用任意长度的颜色值向量。仅使用第一个值。各自的默认值为 1、2、4 和 1。(颜色值格式见第 3.4.1 节。)

后四个参数指定观察线、拟合值和预测值线、置信区间线和分隔线的线型。参数采用任意长度的线型参数向量。仅使用第一个值。各自的默认值为 1(或“实线”)、1、1 和 3(或“虚线”)。(有关线型格式的信息,请参见第 3.3.2 节。)

第 13 到第 15 个参数是标准的 ylab、main 和 ylim(有关更多信息,请参见 3.2.1 节)。ylab 的默认值为“观察/拟合”,main 的默认值为“霍尔特-温特斯滤波”。根据帮助页面进行绘图。HoltWinters(),如果 ylim 设置为 NULL,则该函数选择包含观测值、拟合值和预测值的限制。对于置信区间,默认限制可能不够大。ylim 的默认值为 NULL。

在清单 5-15 中,给出了图 5-15 中示例的一行代码。该示例使用 plot(),x 等于 HoltWinters 类的一个对象。

img/502384_1_En_5_Fig15_HTML.jpg

图 5-15

在 HoltWinters 类的对象上使用 plot()的示例。运行函数 ts()、predict()、HoltWinters()和 plot()

HW = HoltWinters(
  ts(
    sunspot.year,
    freq=11
  )
)

plot(
  HW,
  predict(
    HW,
    100,
    prediction.interval=TRUE
  ),
  col="grey60",
  col.predicted="grey40",
  col.intervals = "grey70",
  ylim=c( -300, 700 )
)

Listing 5-15Code for the example in Figure 5-15 is given. The functions plot(), HoltWinters(), predict(), and ts() are used. The frequency is set in ts(); the number of time periods to predict and to calculate prediction intervals is set in predict(); and col, col.predicted, col.intervals, and ylim are set in plot()

在图 5-15 中,运行清单 5-15 中的代码。

请注意,在 ts()中时间序列的频率被设置为 11,这是创建时间序列对象的函数。预测值的数量在 predict()中设置为 100。观察值以中灰色绘制,拟合值和预测值以深灰色绘制,置信区间以浅灰色绘制。

y 轴限值设置为-300 和 700,以便两个置信区间都包含在图中。由于 0 是该数据集 y 的最小可能值,因此置信下限是不合理的。

isoreg 方法

保序回归是两个正相关变量的非参数回归的一种形式。plot()的 isoreg 方法绘制 isoreg 类的对象。isoreg 类的对象是由函数 isoreg()创建的。在 isoreg()的帮助页面中,该函数执行保序回归——这是一种非参数技术,可拟合一系列单调递增的水平线(端点由垂直线连接)。

isoreg()函数通过查找最小化残差平方和的模型来拟合回归模型。数据可以是一个数字向量,它适合索引值,也可以是两个数字向量,第二个向量适合第一个向量。如果数据趋向于减少而不是增加,那么只有一条水平线是合适的-y 值等于 y 值的平均值。

plot.isoreg()函数接受 10 个指定的参数以及 plot.default()接受的许多参数。前两个参数是 x,代表 isoreg 类的对象;和 plot.type,表示要绘制的页面类型。

x 参数接受 isoreg 类的一个对象。x 没有默认值。

plot.type 参数采用一个单元素字符向量,该向量可以有三个可能的值。这些值为“单个”、“按行”或“按列”。值“single”告诉 plot()绘制一个包含数据和回归拟合的单个图。

对于“行方向”和“列方向”,绘制了第二个图——累积数据和拟合。对于“row.wise ”,两个图在两行中。对于“col.wise ”,这两个图位于两列中。(参数的值可以缩短为唯一的标识符,例如,“col”而不是“col.wise”。)plot.type 的默认值是 c(“single”、“row.wise”、“col.wise”),它告诉 plot()绘制一个单独的图。

第三至第六个参数是 main,用于回归图的标题;main2 表示累积数据图的标题,如果包含该图;xlab 代表图上的 x 轴标签;第一个图中 y 轴标签的 ylab 和第二个图中 y 轴标签的一部分——如果包括第二个图的话。

四个参数采用的值的类型是 plot.default()中 main、xlab 和 ylab 的标准类型(参见第 3.2.1 节)。).main 的缺省值是 paste("保序回归",deparse( x\(call)),main2 的缺省值是"累积数据和凸 Minorant ",xlab 的缺省值是" x0 ",ylab 的缺省值是" x\)y "。

第七个到第十个参数是 par.fit,用于格式化回归线和点;mar,为地块边距的大小;mgp,用于在页边距内放置轴标签、轴刻度标签和轴线;和 grid,用于是否在第一个图中绘制一个网格,在第二个图中绘制一些垂直线。

par.fit 参数接受一个任意长度的列表。函数 plot.isoreg()将忽略任何未命名为 col、cex、pch 或 lwd 的元素。这些元素是 plot.default()的标准 col、cex、pch 和 lwd,但应用于回归线和回归线上的点,而不是数据点。所有的都可以有多个值,并且都通过线和点循环。par.fit 的默认值是list(col = "red", cex = 1, pch = 13, lwd = 1.5)

mar 参数(在 6.2.1.2 小节中介绍)以边距线为单位给出了四个边距的大小。该参数采用长度为 4 的数字向量。par()中的默认值是c( 5.1, 4.1, 4.1, 3.1 )。在 plot.isoreg()中,默认值为if (both) c(3.5, 2.1, 1, 1) else par("mar")

mgp 参数采用三个元素的数值向量。在 par()中,默认值是c(3, 1, 0)。在 plot.isoreg()中,默认值为if (both) c(1.6, 0.7, 0) else par("mgp")

如果运行两个图,par()中的 mar、mgp 和 mfrow 的值会改变。要将默认值返回到 par(),请在 R 提示符下输入par( mar=c( 5, 4, 4 , 2 ) + 0.1, mgp=c( 3, 1, 0 ), mfrow=c( 1, 1 ) )

grid 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果大于 1,则只使用第一个值并给出警告。如果设置为 TRUE,则在回归步骤的第一个图上绘制浅灰色网格,在第二个图上绘制浅灰色垂直线(有关详细信息,请参阅 plot.isoreg()的帮助页)。如果设置为 FALSE,则不绘制网格或线。网格的默认值是length( x$x) < 12.

在清单 5-16 中,给出了图 5-16 中使用 isoreg 类的对象运行 plot()的示例代码。

img/502384_1_En_5_Fig16_HTML.jpg

图 5-16

在 isoreg 类的对象上运行 plot 的示例

plot(
  isoreg(
    pop75.ordered,
    dpi.ordered
  ),
  par.fit = list(
    col=1,
    cex=1,
    pch=23,
    lwd=1.2
  ),
  col=grey( 0.5 ),
  plot.type="row",
  cex=0.75,
  grid=TRUE
)

par(
  mar=c( 5, 4, 4 ,2 ) + 0.1,
  mgp=c( 3, 1, 0 ),
  mfrow=c( 1, 1 )
)

Listing 5-16Code for the example of using an object of the isoreg class in plot(). The arguments par.fit, col, plot.type, cex, and grid are set

在图 5-16 中,运行清单 5-16 中的代码。

请注意,在第二个图中,浅灰色垂直线绘制在第一个图中出现台阶的位置。对于回归线的样式,col 设置为 1,cex 设置为 1,pch 设置为 23,lwd 设置为 1.2。对于观察的样式,col 设置为grey( 0.5 ),cex 设置为 0.75。绘图类型设置为“行”,网格设置为 TRUE。

lm 方法

线性模型是因变量设置为自变量之和乘以常数的模型,例如 y=b0 + b1 x1 + b2 x2。在线性回归模型中,会添加一个误差项,以使线性模型对数据精确。

plot()的 lm 方法绘制 lm 类的对象。stats 包中创建 lm 类对象的函数有 lm()、glm()和 aov()。lm()、glm()和 aov()函数适合线性模型,也就是说,基于线性模型,一个变量 y 适合多个 x 变量,可以只是一个 x 变量。通常,截距是合适的。

lm()函数适合普通的最小二乘模型。glm()函数通过各种方法拟合二项式、高斯、伽玛、逆高斯、泊松、拟、拟二项式和拟泊松模型(有关详细信息,请参阅 family 的帮助页面)。aov()函数适合方差分析模型。

当 x 的值属于 lm 类时,plot()函数最多返回六个图。这六个图是残差与拟合值的图、观察分位数与基于正态分布的理论分位数的图、学生化皮尔逊残差的平方根与拟合值的图、库克距离与观察值的图、学生化皮尔逊残差与杠杆的图,以及库克距离与杠杆除以 1 减去杠杆的图。

plot()函数采用 17 个指定的参数加上 plot.default()的许多参数。参数…是参数顺序中的第八个参数。列出的参数总数为 18,如果...包括在内。

前七个参数是 x,代表 lm 类的对象;哪家,为哪家出谋划策;标题,用于地块上的标题;面板,用于确定是否在某些图中包含平滑线;sub.caption,用于绘图上的副标题(如果绘图是单独绘制的,则所有绘图都是相同的——否则,如果在一页上绘制了多个绘图,则标题位于第三条边的外边距中,并且第三条边的外边距大于零,但如果有多页,则仅位于最后一页);main,用于在所有地块上绘制标题;和询问,用于在打印多页时是否要求在页面之间继续。

x 参数接受 lm 类的一个对象。x 没有默认值。

which 参数采用任意长度的数字向量。这些元素可以取 1 到 6 之间的值,包括 1 和 6。如果元素的值不是整数,则该值会向下舍入为整数。如果多个元素向下舍入到同一个整数,则与该整数相关联的图只绘制一次。无论分配给哪个的值的顺序如何,图总是以相同的顺序绘制。默认值为c(1, 2, 3, 5)

caption 参数接受一系列单元素字符向量(或可强制转换为字符的单元素向量)或可强制转换为字符的单个向量。列表和单个向量的长度可以是任意的。(列表元素的长度也可以大于 1,但是如果长度大于 1,则字符向量的每个新元素都绘制在前一个元素之上。)只使用了前六个元素。

根据在其中选择的图,使用相应的标题,其中每个标题放置在正确的图上方。标题的默认值为list( "Residuals vs Fitted", "Normal Q-Q", "Scale-Location", "Cook's distance", "Residuals vs Leverage", expression("Cook's dist vs Leverage. " * h[ii] / (1 – h[ii]))).

panel 参数接受 function 类的一个对象。可以使用两个可能的函数,panel.smooth()和 points()。如果参数设置为 panel.smooth,则在图 1、图 3、图 5 和图 6 中绘制一条平滑线,默认为红色(可通过改变调色板来改变颜色)。如果设置为点,则不会打印平滑线。panel 的默认值为if(add.smooth) function(x, y, ...) panel.smooth(x, y, iter=iter.smooth, ...) else points,即如果 add.smooth 为 TRUE,则添加平滑线,否则不添加。对于这两个选项,都绘制了点。

sub.caption 参数采用一个可以强制转换为字符的任意长度的向量。如果一页上有多个图,则子标题绘制在最后一页的顶部;如果一页上只有一个图,则子标题绘制在 x 轴标签的下方。(par()中的参数 mfrow 和 mfcol 控制一页上的绘图数量,在 6.2.1.5 一节中介绍。)

如果 sub.caption 的值中有多个元素,则这些元素会在同一行上重叠。对于有多行的文本,字符串中的最低行将绘制在 x 轴标签下方的行上。(字符串中的文本“\n”会导致换行,可用于上下移动元素中的文本。)sub.caption 的默认值为 NULL,即deparse(x$call) is plotted的(可能)缩略版。

主参数采用一个向量,该向量可以被强制转换为字符,并且可以是任意长度。所有地块上标题上方的主地块的值。对于具有多个元素的向量,向量的每个元素都绘制在不同的线上。main 的默认值为“”,即不打印标题。

ask 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果超过一个值,则只使用第一个值并给出警告。TRUE 值告诉 plot()在转到新页面之前询问是否绘制了多个页面。如果值为 FALSE,则不暂停所有绘图。ask 的默认值为prod(mfcol) < length(which) && dev.interactive(),即如果一页的出图数小于待出图数,则询问是否转到下一页。请注意,如果包含重复项,默认逻辑可能会失败。

plot.lm()的第九到第十八个参数是 id.n,用于标注极值点的个数;labels.id,用于分配给观察值的标签;cex.id,用于标签中使用的字符大小;qqline,用于是否在分位数-分位数图上绘制 45 度线;cook.levels,用于绘制等高线的 cook 距离值;add.smooth,用于是否在图 1、3、5 和 6 上绘制平滑线;iter.smooth,如果 panel 等于 panel.smooth,则 iter 的值将提供给函数 panel . smooth();label.pos,表示前三个图中标签的位置;cex.caption,用于标题中使用的字符大小;和 cex.oma.main,如果一页上有多个绘图,则用于子标题中的字符大小。

id.n 参数采用任意长度的数值向量。如果超过一个元素,则只使用第一个元素并给出警告。参数必须大于-1 且小于或等于观察次数。如果介于-1 和 1 之间且不等于其中任何一个,则不绘制标签。如果大于 1 且不是整数,则该数字向下舍入到下一个最小的整数。id.n 的默认值是 3。

labels.id 参数采用 NULL 值或任何可以强制转换为字符模式的向量,并且可以是任意长度。如果 labels.id 等于 NULL,则观察值的索引值被指定为标签。如果 labels.id 的值大于观测值的数量,则仅使用索引达到观测值数量的标签。如果短于观察值的数量,那么如果观察值是极端的,则只有那些索引达到 labels.id 长度的观察值被给予标签。labels.id 的默认值是names(residuals(x))

cex.id 参数采用一个数字向量。如果绘制第五个图,向量的长度必须为 1。否则,向量可以是任意长度;并且极值上的标签可以具有不同的大小,其中赋值的顺序基于极值的顺序。cex.id 的默认值是 0.75。

qqline 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果长度超过一个元素,则只使用第一个元素并给出警告。如果设置为 TRUE,则在分位数-分位数图(第二个图)中绘制线条。如果为 FALSE,则不绘制线条。默认值为 TRUE。

cook.levels 参数采用任意长度的非负数值向量。如果等高线在图的界限内,则为 cook.levels 中的每个值绘制等高线。cook.levels 的默认值是c(0.5, 1.0)

add.smooth 参数采用任意长度的逻辑向量(或可以强制为逻辑向量的向量)。如果长度超过一个元素,则只使用第一个元素并给出警告。如果设置为 TRUE,该参数告诉 plot()根据平滑后的 y 值添加一条线(在图 1、3、5 和 6 中)。如果为 FALSE,则不绘制线条。默认值为getOption("add.smooth"), which on my device has a value of TRUE。(options()中的第一个选项是 add.smooth。)

iter.smooth 参数采用任意长度的数值向量。仅使用第一个值。iter.smooth 的默认值为if(isGlm) 0 else 3,即如果 x 是 glm()函数的结果,那么将 iter.smooth 设置为 0。否则,将 iter.smooth 设置为 3。

label.pos 参数采用一个长度大于 1 的数字向量(或可以强制为数字的字符向量)。仅使用前两个值;这些值只能取数字 1、2、3 或 4。第一个值给出了相对于奇数标签点的位置,第二个值给出了偶数标签点的位置。值 1 表示标注位于点的下方,值 2 表示标注位于点的左侧,值 3 表示标注位于点的上方,值 4 表示标注位于点的右侧。label.pos 的默认值为 c(4,2),也就是说,标注绘制在索引值为奇数的点的右侧,索引值为偶数的点的左侧。

cex.caption 参数采用任意长度的数字或逻辑向量。逻辑向量被强制为数字。该值给出了标题中使用的字符大小。如果为 cex.caption 设置了多个值,则每个值的标题都绘制在相同的位置。所以只使用一个值是最有意义的。cex.caption 的默认值是 1。

cex.oma.main 参数采用任意长度的数字或逻辑向量。逻辑值被强制为数字。仅当绘制了多个图,并且第 3 边的外部边距设置为大于 0 时,该参数才有效(更大的值取决于用于副标题的字符大小)。然后 cex.oma.main 像 cex.caption 操作字幕一样操作子字幕。cex.caption 的默认值是 1.25。

在清单 5-17 中,给出了生成图 5-17 的代码。示例是在 lm 类的对象上使用 plot()。在运行 plot()之前,调色板更改为灰度,oma 和 mfrow 在 par()中更改。运行 plot 后,调色板、oma 和 mfrow 将变回默认值。

img/502384_1_En_5_Fig17_HTML.jpg

图 5-17

使用 lm 类的对象运行 plot()的示例。设置的参数是 x、caption、which、labels.id、sub.caption、main、id.n、cex.id、cook.levels、iter.smooth、label.pos、cex.caption 和 cex.oma.main

palette(
  grey(
    0:10/14
  )
)

par(
  mfrow=c( 2, 2 ),
  oma=c( 2, 2, 2, 2 )
)

plot(
  glm(
    sr ~ .,
    data=LifeCycleSavings
  ),
  caption=paste( "plot", 1:6 ),
  which=c( 1, 2, 4, 5 ),
  labels.id=NULL,
  sub.caption="sub.caption",
  main="main",
  id.n=2,
  cex.id=0.9,
  cook.levels= c( 0.33, 0.67, 1 ),
  iter.smooth=5,
  label.pos=c( 4, 4 ),
  cex.caption=1.15,
  cex.oma.main=1.4
)

par(
   mfrow=c( 1, 1 ),
   oma=c( 0, 0, 0, 0 )
)

palette(
  "default"
)

Listing 5-17Code for the example of using plot() on an object of the lm class. The arguments x, caption, which, labels.id, sub.caption, main, cex.id, cook.levels, iter.smooth, label.pos, cex.caption, and cex.oma.main are set

在图 5-17 中,运行清单 5-17 中的代码。

在该示例中,仅绘制了六个可能的图中的四个。六个地块上的标题被赋值为“地块 1”、“地块 2”、“地块 6”。labels 参数设置为 NULL,因此索引值用于标签。在图 5-17 中,由于页面上有多个图且只有一个页面,副标题出现在图的上方。参数 main 的值“main”标在每个图的标题上方。

因为 id.n 被设置为 2,所以为每个图中的两个最极端的 y 值绘制了两个标签。标签的字符大小设置为 0.9。库克距离有三个等高线级别,绘制了六条等高线。由于 iter.smooth 设置为 5,因此平滑效果很强。因为两个 lab.pos 值都设置为等于 4,所以两个标签都绘制在点的右侧。字幕的字符大小为 1.15,副标题的字符大小为 1.4。

为了在一页上绘制四个图,在 par()中将参数 mfrow 设置为 c( 2,2)。绘图完成后,将 mfrow 设置回 c( 1,1 ),将 R 重置为在页面上绘制一个图。通过在 par()中将 oma 设置为 c( 2,2,2,2)将外部边距设置为两行深,然后在绘图完成后,通过将 oma 设置为 c( 0,0,0,0)将宽度设置回零。为了将默认情况下为红色的线条和文本更改为灰色,调色板被更改为灰度。运行 plot()后,调色板被改回默认调色板。(有关 par()和一页上多个图的信息,请参见第 6.2 节。)

ppr 方法

投影寻踪回归是回归的一种形式。回归使用一个或多个自变量来估计一个或多个因变量的模型。plot.ppr()的 ppr 方法绘制 ppr 类的对象。ppr 类的对象是由函数 ppr()创建的。函数 ppr()对 x 上的 y 进行投影寻踪回归,其中任何一个都可以是矩阵或向量,并且都具有相同的长度和/或行数。这些图是为 ppr()中的每个项绘制的,并且是这些项的脊函数。有关更多信息,请参见 ppr()的帮助页面。

plot.ppr()函数接受七个指定的参数,加上 plot.default()使用的许多参数。所有参数都是 plot.default()的标准参数,但在 plot.ppr()中有不同的默认值。参数是 x,表示 ppr 类的对象;问,为是否在策划新的绘图前问;类型,为绘图的种类;cex,为标绘字符的字符大小;main,为剧情标题;和 y 轴标签的 xlab 和 ylab。有关 ask 的信息,请参见 6.2.1.5 部分;第 3.3.1 节为类型;cex 的第 3.4.3 节;以及第 3.2.1 节的 main、xlab 和 ylab。

x 参数接受 ppr 类的一个对象。x 没有默认值。

ask 参数默认采用 par()中 ask 的值,在我的设备上是 FALSE。

默认情况下,类型参数采用值“o ”,即在点上绘制直线。

默认情况下,cex 参数的值为。相对于 par()中 cex 的值。

主参数采用值引号(bquote(" term "]。I]* " I "--hat(beta[。我]) ==。(bet.i)))默认。

xlab 参数采用默认值quote(bquote(bold(alpha)[.(i)]^T * bold(x))).

y 参数采用默认值"".

在清单 5-18 中,给出了图 5-18 中运行 plot()的示例代码,其中 x 设置为 ppr 类的对象。绘制了四个脊函数图。

img/502384_1_En_5_Fig18_HTML.jpg

图 5-18

在 plot()中使用 ppr 类对象的示例

par(
  mfrow=c( 2, 2 ),
  oma=c( 1, 1, 3, 1 )
)

plot(
  ppr(
    x=LifeCycleSavings[ , 2:5 ],
    y=LifeCycleSavings[ , 1 ],
    nterms=4,
    max=5
  )
)

mtext(
  "Example

of Using a ppr Class Object in plot()\nPlots of the Ridge Functions",
  side=3,
  font=1,
  outer=TRUE
)

par(
  mfrow=c( 1, 1 ),
  oma=c( 0, 0, 0, 0 )
)

Listing 5-18Code for an example of using an object of the ppr class in plot(). Four terms are used in ppr()

在图 5-18 中,运行清单 5-18 中的代码。

请注意,项数为 4(n terms = 4),因此绘制了四个脊函数图。在 main 和 xlab 中,quote()和 bquote()函数允许改变每个图的索引。在 bquote()中,表达式。(I)返回函数中 I 的当前值。

prcomp 和 princomp 方法

主成分是矩阵的性质。给定一个矩阵,在列中包含原始矩阵的主分量的矩阵,当与左边的原始矩阵相乘时,创建一个新矩阵,它具有与原始矩阵相同的信息,但是对于它,矩阵的列是线性独立的。主成分分析有时用于数据建模,以降低相关变量的维数。主成分分析的另一个主要用途是对数据集中的观察值进行聚类。

plot()的 prcomp 和 princomp 方法绘制 prcomp 和 princomp 类的对象。prcomp 和 princomp 类的对象是由函数 prcomp()和 princomp()创建的。这两个函数都对数值矩阵或数据框进行主成分分析。这些函数的不同之处在于计算中使用的 R 函数以及包含数据的矩阵或数据帧的协方差矩阵的除数。

对于 prcomp(),使用奇异值分解,即使用 svd()函数,找到特征值和特征向量。此外,在协方差的估计中——如果完成的话——协方差矩阵的除数是观察数减 1。

对于 princomp(),通过将函数 cor()的输出输入到函数 eigen()中,可以找到特征值和特征向量。如果在计算中使用协方差矩阵,则协方差矩阵的除数是观测值的数量,而不是观测值的数量减 1。根据 prcomp()和 princomp()的帮助页面,prcomp()使用的方法是首选的计算方法。

函数 plot()从两个函数的输出中创建一个 scree 图。scree 图描绘了每个主成分包含的总方差的量。如果用标准化变量做分析,那么标准化原始矩阵每一列的方差都是 1,那么总方差就是列数。

如果 x 是 prcomp 或 princomp 类的对象,则 plot()没有除 x 之外的指定参数。(函数 plot.prcomp()和 plot.princomp()都采用 screeplot()采用的参数。)

在清单 5-19 中,给出了在 prcomp 和 princomp 类的对象上使用 plot()的示例代码。

par(
  mfrow=c( 1, 2 ),
  oma=c( 2, 0, 3, 0 )
)

plot(
  prcomp(
    LifeCycleSavings,
    scale=TRUE
  ),
  main="prcomp()"
)

plot(
  princomp(
    LifeCycleSavings,
    cor=TRUE
  ),
  main="princomp()"
)

mtext(
  "Example of Using plot() on Output\nfrom prcomp() and princomp()",
  side=3,
  outer=TRUE
)
mtext(
  "2 Scree Plots",
  side=1,
  outer=TRUE
)

par(
  mfrow=c( 1, 1 ),
  oma=c( 0, 0, 0, 0 )
)

Listing 5-19Code for the example, in Figure 5-19, of using plot() on objects of the prcomp and princomp classes

在图 5-19 中,运行清单 5-19 中的代码。

img/502384_1_En_5_Fig19_HTML.jpg

图 5-19

Scree 图,当 x 设置为等于 prcomp 和 princomp 类的对象时,由 plot()生成

注意,绘图非常相似。唯一的主要区别是,对于 prcomp()的输出,缺省情况下不绘制条形标签,而 princomp()的输出缺省情况下绘制条形标签。

profile.nls 方法

非线性最小二乘建模是一种用于用模型对数据向量建模的方法,其中独立变量之间的关系是非线性的。最小平方标准用于评估模型与数据的拟合程度。

plot()的 profile.nls 方法绘制 profile.nls 类的对象。profile.nls 类的对象是通过对 nls()创建的对象运行 profile()来创建的。nls()函数对非线性模型进行最小二乘拟合。

函数创建诊断图。根据该函数的帮助页面,图的垂直轴上是统计量τ–它是残差平方和的变化的平方根除以残差的标准误差。(残差平方和的值随着在拟合过程中被估计的系数值的改变而改变。)在水平轴上是当系数的大小改变时系数取的值。可以为每个被估计的系数或系数的子集生成图。

plot.profile.nls()函数采用六个指定的参数,加上 plot.default()的许多参数。但是,根据该函数的帮助页,不能设置参数 xlab、xlim、ylim 和 type。为 profile.nls 类的对象指定的参数是 x。水平,用于以τ为单位测量的置信轮廓的水平;conf,用于在置信水平中测量的置信轮廓水平;absVal,用于是否在剧情中使用τ的绝对值;lty,用于置信轮廓的线型和估计系数处的垂直线;y 轴上的标签。

x 参数采用 profile.nls 类的对象。x 没有默认值。

levels 参数采用任意长度的数值向量。这些值应该是τ的合理值。级别没有默认值。

conf 参数采用任意长度的数字向量。这些值必须介于 0 和 1 之间,但不能等于任何一个值。(如果同时设置了级别和配置,则使用级别。)conf 的默认值是c(99, 95, 90, 80, 50)/100

absVal 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果超过一个,则只使用第一个元素并给出警告。如果设置为 TRUE,则绘制τ的绝对值。如果为假,τ的负值将被绘制为负值。absVal 的默认值为 TRUE。

lty 参数采用任意长度的线型向量(参见第 3.3.2 节)。仅使用第一个值。lty 的默认值为 2,即虚线。

图中的颜色基于调色板中的颜色值(参见第 3.4.1.3 节)。根据 plot.profile.nls()的帮助页面,轴的颜色基于调色板的第一个元素。在我的设备上,设置调色板的第一个元素不会影响轴的颜色——轴用黑色绘制。

参数估计值处垂直线的颜色基于调色板中的第三个元素。代表 tau 的线条颜色基于第四个元素。置信轮廓的颜色基于第六个元素。

plot.profile.nls()中没有元素来告诉函数选择哪些参数进行绘图。在轮廓()中生成的所有轮廓都被绘制。profile()中的 which 参数控制生成哪些配置文件。

在清单 5-20 中,给出了图 5-20 中示例的代码。该示例演示了如何使用函数 palette()、par()、mtext()、nls()和 profile()以及参数 levels、lty 和 ylab。

img/502384_1_En_5_Fig20_HTML.jpg

图 5-20

在 profile.nls 类的对象上使用 plot()的示例。运行函数 par()、mtext()、plot()、nls()、profile()和 palette()。在 plot()中,设置了参数 levels、lty 和 ylab

palette(
  grey(
    c( 7, 0, 3, 0, 0, 6 )/8
  )
)
par(
   mfrow=c( 2, 2 ),
   oma=c( 0, 0, 4, 0 ) + 0.1
)

sr.ordered=LifeCycleSavings$sr[ ord ]

plot(
  profile(
    nls(
      sr.ordered ~ y_center +
        y_scale*cos( pi/angle_divisor*( pop15.ordered + angle_shift ) ),
      start=list(
        y_center=10,
        y_scale=3

,
        angle_divisor=20,
        angle_shift=-20
      )
    )
  ),
  levels=c( 0.5, 1, 1.5, 2 ),
  lty=5,
  ylab="| tau |"
)

mtext(
  "Example of a profile.nls Class Object in plot()\nTau Plots for 4 Parameters",
  side=3,
  outer=TRUE,
  line=1
)

par(
   mfrow=c( 1, 1 ),
   oma=c( 0, 0, 0, 0 )
)

palette(
   "default"
)

Listing 5-20Code for the example of running plot() on an object of the profile.nls class

在图 5-20 中,运行清单 5-20 中的代码。

请注意,x 标签是参数的名称。此外,还绘制了所有参数的曲线图。没有设置 profile()中的 which 参数,因此使用默认值(为所有参数生成配置文件)。

plot()中的参数 levels、lty 和 ylab 分别设置为 c( 0.5、1、1.5、2)、5 和“| tau |”。通过运行设置了灰度级颜色的 palette(),调色板中的颜色将变为灰度级上的颜色。置信度等值线在 tau 标度上均匀分布。当 type 设置为 5 时,线型为长破折号。

5.3.13 规格、规格一致性和规格相位方法

在时间序列分析中,两种常见的方法是时域方法和频域方法。时域方法通过观察一段时间内的时间序列图来寻找在时间上重复的模式(例如观察一段时间内太阳黑子数据的 11 年周期)。第 5.3.1、5.3.2、5.3.7、5.3.15 和 5.3.16 节中的方法是在时域中。

频域包括绘制数据与频率的关系,而不是与时间的关系,以寻找周期发生的频率。函数 spectrum()创建数据与频率的关系图。用于创建 spectrum()给出的图的方法是基于计算周期图,或者基于原始数据,或者基于自回归模型的拟合。

在太阳黑子数据中,大约每 11 年有一个周期。使用频谱(),在数据对频率的曲线图中,在 0.091 处有一个峰值。(0.091 的值是 1/11。因为黑子. year 对象中的频率是 1,而不是 11,所以 1 除以 0.091 的值给出了以年为单位的周期。)

spec 类的 plot() plot 对象的 spec、spec.coherency 和 spec.phase 方法。spec 类的对象从函数 spectrum()中输出。函数 spectrum()拟合数据的周期图或数据的自动拟合的周期图,其中数据是时间序列对象。(对于多个时间序列,自回归模型尚未建立和运行。)

在 spectrum()中,方法参数告诉 spectrum()要么从原始数据创建周期图,要么首先拟合自回归模型。如果选择第一种方法,可以绘制原始周期图,或者对周期图进行平滑。如果进行了平滑,根据 spectrum()的帮助页面,参数 spans 设置平滑宽度,并且使用修改的 Daniell 平滑器进行平滑。第二种方法不会对周期图进行平滑处理。

三种类型的绘图由 plot.spec()的三个版本生成。第一种是边际图,它绘制时间序列的边际周期图。第二种类型绘制多个时间序列之间的一致性,一次两个。第三种类型绘制多个系列之间的相移,一次两个。

plot.spec()函数接受 11 个指定的参数,加上 plot.default()的许多参数。参数是 x,表示 spec 类的对象;添加,用于是绘制新的地块还是添加到现有地块;ci,为置信区间的水平;log,表示 y 轴上的刻度类型;xlab 和 ylab,用于 x 和 y 轴上的标签;type,为地块的类型;ci.col,用于置信轮廓的颜色;ci.lty,用于置信轮廓的线型;主副,为剧情的标题和副标题;和 plot.type,表示要为三种绘图类型中的哪一种绘图。

x 参数接受 spec 类的一个对象。x 没有默认值。

add 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。该参数似乎不会影响我的设备上的绘图。add 的默认值为 FALSE,即开始新的绘图。

ci 参数采用长度为 1 的数字向量。ci 的值必须介于 0 和 1 之间(不含 0 和 1 ),并给出置信区间的级别。仅为平滑相干性或相位图绘制置信区间。

log 参数采用长度为 1 的字符向量,根据 plot.spec()的帮助页面,只有当图是边缘图时,它才会影响图。不接受逻辑向量(与 plot.spec()的帮助页面上所写的不同)。log 的四个可能值是“否”,对于 y 轴上的线性标度;“dB”,对数标度,以十为基数的幂作为 y 轴上的标签;“是”,对于对数标度,y 轴上的标签为 10 的 1、2、5 次幂;和 NULL,结果与“是”相同。log 的默认值为c("yes", "dB", "no"),即使用的值为“yes”。

xlab、ylab 和 type 参数是 plot.default()中的标准参数(参见第 3.2.1 节和第 3.3.1 节)。plot.spec()中边际图的默认值是 xlab 的“频率”, ylab 的 NULL,以及 type 的“l”。对于相干图,值为“频率”、“相干平方”和“l”。对于相位图,值为“频率”、“相位”和“l”。

ci.col 和 ci.lty 参数采用任意长度的颜色和线型向量(参见 3.4.1 和 3.3.2 节了解值的种类)。对于这两个参数,只使用第一个值。ci.col 的默认值为“蓝色”, ci.lty 的默认值为 3(虚线)。

主参数和子参数是来自 plot.default()的标准参数(参见第 3.2.1 节)。对于这两个参数,plot.spec()中的默认值都为 NULL。

plot.type 参数采用长度为 1 的字符向量。对于三种类型的绘图,plot.type 的可能值是“边际”、“相干性”和“相位”。(这些值可以缩写为“m”、“c”和“p”。)如果 x 包含单个时间序列,“相干性”和“相位”的值会产生误差。plot.type 的默认值为c("marginal", "coherency", "phase"),即绘制一个边际图。

相干图和相位图都采用不同于 plot.default()的缺省 ylim。默认情况下,相干图采用 ylim 等于c(0, 1)。默认情况下,相位图将 ylim 设为等于c(-pi, pi)。(有关 ylim 的信息,请参见第 3.2.1 节。)

假设方法和跨度在 spectrum()中可以变化,并且 plot.spec 函数生成三种类型的图,则 plot.spec 类对象的可能基本图形数为 7。对于图 5-21 中的例子,在 spectrum()中,method 被设置为“pg ram ”, spans 被设置为 3,在 plot.spec()中,ci 被设置为 0.966,plot.type 被设置为“coherency”。

img/502384_1_En_5_Fig21_HTML.jpg

图 5-21

使用 spec 类的对象运行 plot()的示例。在 spectrum()中,设置了方法和跨度。在 plot()中,设置了 plot.type 和 ci。频率是每 11 年一个周期

示例中使用的时间序列是 lkhu,来自 LakeHuron 数据集;尼罗河,来自尼罗河数据集;和 snpt,来自太阳黑子年数据集。LakeHuron、Nile 和黑子. year 数据集位于数据集包中,大多数用户都可以访问,因为数据集包在 r 中是默认加载的。1875-1970 年是通过使用函数窗口()从三个数据集中选择的。

在清单 5-21 中,给出了图 5-21 中示例的代码。

snpt = window(
  sunspot.year,
  start=1875,
  end=1970,
  freq=1
)

nile =  window(
  Nile,
  start=1875,
  end=1970,
  freq=1
)

lkhu = window(
  LakeHuron,
  start=1875,
  end=1970,
  freq=1
)

plot(
  spectrum(
    ts(
      cbind(
        lkhu,
        nile,
        snpt
      ),
      start=1,
      freq=11
    ),
    method="pgram",
    spans=3
  ),
  plot.type="coherency",
  ci=0.966
)

Listing 5-21Code for an example of using an object of the spec.coherency class in plot(). The method and spans arguments are set in spectrum(), and the ci and plot.type arguments are set in plot.spec()

在图 5-21 中,运行清单 5-21 中的代码。

请注意,图中使用了平滑的周期图,因为 spectrum()中的方法设置为“pgram ”,跨度设置为 3。由于 plot.type 在 plot()中设置为“coherence ”, ci 设置为 0.966,因此绘制了每对周期图之间的一致性以及 96.6%的置信区间。ts()中设置的频率是 11。

(请注意,x 轴刻度上的标签给出了时间序列对象除以从 0 到 0.5 的序列的频率。也就是说,如果时间序列对象的频率等于 11,那么 x 轴上的频率从 0 到 5.5。此外,x 轴和 y 轴标签是时间序列的名称。)

stepfun 方法

阶跃函数图是一种从点到点创建阶跃的图。plot()的 stepfun 方法绘制 stepfun 类的对象。stepfun 类的对象是由函数 stepfun()和 as.stepfun()创建的。stepfun 类的一个对象是一个列表,其中包含绘制 step 函数所需的信息(有关列表的组件,请参见 stepfun()的帮助页面)。函数——作为 plot.stepfun()运行——也将数值向量绘制为阶跃函数。(plot.ecdf()函数从一个数字向量中绘制出一种特殊的阶跃函数。)

应用于 stepfun 类对象的函数 plot()接受 18 个指定的参数,加上 plot.default()的许多参数。参数是 x,代表 stepfun 类的对象;xval,用于查找和绘制 y 的 x 值;xlim 和 ylim,用于 x 和 y 轴的限制;xlab、ylab 和 main 用于 x 和 y 轴上的标签和绘图的标题;添加,用于是否添加到现有地块;verticals,用于是否绘制步骤的垂直部分;do.points,用于是否在一个点上绘制一个绘图字符;pch 和 col,用于绘制字符和线条的绘制字符和颜色;col.points 和 cex.points,如果 do.points 为真,则用于标绘字符的颜色和大小;col.hor 和 col.ver,用于台阶的水平和垂直部分的颜色;以及 lty 和 lwd,用于线的线型和线宽。

x 参数接受 stepfun 类的一个对象。stepfun 没有默认值。

xval 参数接受任意长度的数字向量。对于 xval 中的每个 x,在 y 轴上画一个点。如果 xval 的长度大于 x 的长度,y 中的一些点会被多次使用。如果小于 x 的长度,则使用与 x 和下一个更大的 x 之间的中间值相关联的 y。xval 没有默认值。

参数 xlim 和 ylim 是 plot.default()中的标准参数(参见第 3.2.1 节)。xlim 没有默认值。ylim 的默认值是range(c(y, Fn.kn))

xlab、ylab 和 main 参数是 plot.default()中的标准参数(参见第 3.2.1 节)。xlab 的默认值是“x”,ylab 的默认值是“f(x)”,main 的默认值是 NULL。

add 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果大于 1,则只使用第一个值并给出警告。如果设置为 TRUE,该图将被添加到上一个图中。如果为 FALSE,则打开一个新的地块。add 的默认值为 FALSE。

verticals 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果大于 1,则只使用第一个值并给出警告。如果设置为 TRUE,则在台阶处绘制垂直线。如果为 FALSE,则不绘制垂直线。verticals 的默认值为 TRUE。

do.points 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果大于 1,则只使用第一个值并给出警告。如果设置为 TRUE,则绘制点。如果为 FALSE,则不绘制点。do.points 的默认值为(n < 1000),即点数小于 1000 为真,否则为假。

col.hor 和 col.ver 参数采用任意长度的颜色向量(有关可能的颜色值,请参见第 3.4.1 节)。当函数经过这些点时,颜色向量循环。col.hor 和 col.ver 的默认值是由 col 设置的颜色。

lty 和 lwd 参数是 plot.default()中的标准参数(参见第 3.3.2 和 3.4.4 节)。lty 和 lwd 的默认值是我的设备上 lty 和 lwd 的 par()中的值-“黑色”和 1。

在清单 5-22 中,给出了对 stepfun()的输出使用 plot()的代码。设置了 xval、verticals、pch、col.points、cex.points 和 lwd 参数。

plot(
  stepfun(
    1:50,
    c(
      pop15.ordered[1],
      pop15.ordered
    )
  ),
  xval=1:100/2,
  verticals=FALSE,
  pch=23,
  col.points=grey( 0.4 ),
  cex.points=0.9,
  lwd=2.5
)

Listing 5-22Code for the example in Figure 5-22 for using plot() on an object of the stepfun class. The xval, verticals, pch, col.points, cex.points, and lwd arguments are set

在图 5-22 中,运行清单 5-22 中的代码。

img/502384_1_En_5_Fig22_HTML.jpg

图 5-22

在 plot()中使用 stepfun 类的对象的示例。设置了 xval、verticals、pch、col.points、cex.points 和 lwd 参数

在 stepfun()中,绘制在 x 轴上的值必须是一个递增的向量(图 5-22 中的 1:50 就是这个向量)。注意,对于 y,pop15.ordered 的第一个元素是重复的。要在正确的位置绘制点,必须在 y 轴的起点添加一个点。由于阶跃函数从 x 轴的起点开始,因此将 y 轴的第一个和第二个值设置为要绘制的向量的第一个值具有很好的图形意义。

xval 参数被设置为 1 到 50 之间宽度为 1/2 的偶数步长。每个点在 pop15.ordered 的相应元素的高度上绘制两次。步骤绘制在点的右侧。(方向可以在 stepfun()里改变。)

绘图字符是 23-一个开放的菱形-并以 0.9 字符宽度大小的中灰色绘图。台阶的线宽为 2.5。台阶的垂直部分没有画出。

stl 方法

季节性时间序列分解可以使用黄土法而不是自回归法来完成。本节中的绘图与第 3.3.2 节中的绘图非常相似,但在本节中,查找绘图中使用的值的方法有所不同——使用黄土法。

plot()的 stl 方法绘制 stl 类的对象。stl 类的对象是由 stl()函数创建的。stl()函数使用黄土法进行季节性时间序列分解,与使用自回归法进行季节性时间序列分解的函数()相反(自回归法的图见第 3.3.2 节)。

plot.stl()函数接受六个指定的参数,其中一个接受四个子参数,加上 plot.default()的许多参数。…参数在参数顺序中位于第六位,因此最后一个参数不能缩短。指定的参数是 x,代表 stl 类的对象;标签,用于组件的四个图的 y 轴标签;set.pars,用于设置绘图的参数(包含 mar、oma、tck 和 mfrow,它们是 par()的参数);主要的,为标题超过四个绘图;range.bars,用于确定是否放置一个代表绘图的 y 刻度的标准尺寸度量的条;和 col.range,表示范围栏的颜色。

x 参数接受 stl 类的一个对象。x 没有默认值。

labels 参数接受任意长度的字符向量(或可以强制为字符的向量)。如果有四个以上的元素,则只使用前四个。如果小于 4,元素不会循环。没有标签的图不会被赋予标签。标签的默认值为colnames(X),即顶部图的“数据”,下一个图的“季节”,第三个图的“趋势”,以及底部图的“余数”。

set.pars 参数设置 mar、oma、tck 和 mfrow 的参数(除 tck 之外的所有参数都包含在 6.2 节中;tck 包含在第 3.4.5 节中)。参数的默认值为:mar 的c(0, 6, 0, 6)、oma 的c(6, 0, 4, 0)、tck 的-0.01和 mfrow 的c(nplot, 1)

主参数是来自 plot.default()的标准参数(参见第 3.2.1 节)。在 plot.stl()中,main 的缺省值为 NULL,即不打印任何标题。

range.bars 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果超过一个,则只使用第一个元素并给出警告。如果设置为 TRUE,则绘制范围栏。如果为 FALSE,则不绘制范围栏。range.bars 的默认值为 TRUE。

col.range 参数采用任意长度的颜色值向量(参见第 3.4.1 节了解颜色值的种类)。如果大于 1,则只使用第一个值。col.range 的默认值是“浅灰色”。

在清单 5-23 中,给出了图 5-23 中使用 plot()中 stl 类对象的示例代码。

img/502384_1_En_5_Fig23_HTML.jpg

图 5-23

在 plot()中使用 stl 类对象的示例。设置参数 labels、main 和 col.range。该数据集是来自 R

plot(
  stl(
    ts(
      sunspot.year,
      start=1,
      freq=11
    ),
    "per"
  ),
  labels=c( "DATA", "SEASONAL", "TREND", "REMAINDER" ),
  main="Example of Using a stl Class Object in plot()",
  col.range="grey70"
)

Listing 5-23Code for the example of using an object of the stl class in plot. The arguments labels, main, and col.range are set

在图 5-23 中,运行清单 5-23 中的代码。

注意,四个图上的标签从小写字母变成了大写字母。使用标题的默认打印设置将标题添加到打印中。范围栏的颜色从“浅灰色”变为“灰色 70”。

数据和剩余数据在 y 轴上的刻度范围远大于趋势和季节分量的刻度范围,如范围条所示。用于绘图的数据集与用于分解的. ts 方法的示例中使用的数据集相同(参见第 3.3.2 节),因此可以直接比较绘图。

ts 方法

时间序列是一种特定形式的数据。对于时间序列,观测是在均匀间隔的时间或位置进行的。在 R 中,时间序列可以用开始(和可选的结束)时间和给定的频率来创建。

plot()的 ts 方法绘制 ts 类的对象。ts 类的对象是由 ts()和 as.ts()函数创建的。ts 函数从一个向量或矩阵中创建一个时间序列。ts 类的对象具有周期中的开始位置和周期中的结束位置以及与系列相关联的周期频率,以及系列中的数据。函数的作用是:返回一个时序类对象的开始、结束和频率。)使用非时间序列的向量或矩阵运行全名 plot.ts()绘制时间序列图,其中起始值为 1,频率为 1。

plot.ts()函数采用十个指定的参数加上 plot.default()的许多参数。指定的参数是 x,表示 ts 类的第一个对象;y,用于 ts 类的第二个对象,如果包括一个的话;xy.labels 和 xy.lines,用于在给定 y 的情况下,是否以及用哪些标签和/或线来绘制 x 对 y 的图;面板,用于在绘制多个图时绘制图中数据的功能(似乎不会影响我的设备上的图);nc,表示用于多个图的列数;yax.flip,用于在绘制多个图时,是否将 y 轴标签、轴刻度标签和刻度线放在交替图上的右侧而不是左侧;mar.multi 和 oma.multi,用于绘图上的边距大小和外部边距大小,如果绘制了多个绘图,也是如此;和轴,用于是否绘制轴。

x 参数接受一个任意长度的 ts 类数值向量或矩阵。对于矩阵,数列在列中,观察值在行中。x 没有默认值。

y 参数接受 NULL 值或数值向量。如果是一个矢量,根据 plot.ts()的帮助页,x 也必须是一个矢量,而且 x 和 y 的长度必须相同。然后,该函数绘制 y 相对于 x 的散点图。y 的默认值为空,即 x 相对于时间绘制。

plot.type 参数采用长度为 1 的字符向量。当 x 是矩阵时,自变量会影响图。该参数可以取值“multiple”或“single”,以便为每个时间序列创建单独的图,或者在一个图上绘制多个时间序列。

xy.labels 参数接受任意长度的逻辑向量或字符向量。如果是逻辑元素且长度大于 1,则只使用第一个元素并给出警告。如果字符长度小于 x 和 y 的长度,则值循环到 x 和 y 的末端。如果长度大于 x 和 y,则忽略超出的值。xy.labels 没有默认值,即 x 和 y 的时间值绘制在这些点上。

xy.lines 参数采用任意长度的逻辑向量。如果超过一个,则只使用第一个元素并给出警告。如果设置为 TRUE,则绘制“c”类型的线(参见第 3.3.1 节)。如果设置为 FALSE,则不绘制任何线。xy.lines 没有默认值,也就是说,根据 plot.ts()的帮助页,如果 xy.labels 是逻辑值,xy.lines 将采用相同的值。如果 xy.labels 是 character,则 xy.lines 设置为 TRUE。

panel 参数以函数名作为值。争论对我的设备没有影响。面板的默认值是线条。

nc 参数接受一个长度为 1 的正数值向量。如果不是整数,该值将向下舍入为整数,但介于 1.5 和 2 之间的值除外,这些值可能会出现异常情况。nc 没有默认值,即根据 plot.ts()的帮助页面,如果时序个数小于等于四,则使用一列,否则使用两列。

yax.flip 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果超过一个,则只使用第一个元素并给出警告。如果设置为 TRUE,y 轴标签、轴刻度标签和刻度标记将在交替图上翻转到右侧。如果为 FALSE,y 轴注释不会翻转。yax.flip 的默认值为 FALSE。

mar.multi 和 oma.multi 参数采用长度为 4 的非负数值向量,给出下、左、上和右边距的线宽数。mar.multi 的默认值为c(0, 5.1, 0, if (yax.flip) 5.1 else 2.1)。oma.multi 的默认值是c(6, 0, 5, 0)

axes 参数采用任意长度的逻辑向量(或者可以强制为逻辑向量)。如果超过一个,则只使用第一个元素并给出警告。如果设置为 TRUE,则绘制轴。如果为 FALSE,则不绘制轴。轴的默认值为 TRUE。

在清单 5-24 中,给出了使用 x 和 y 的两个时间序列向量运行 plot()的示例。数据来自 R 包数据集中的黑子、年份、尼罗河和莱克休伦数据集。

snpt = window(
  sunspot.year,
  start=1875,
  end=1970,
  freq=1
)
nile  = window(
  Nile,
  start=1875,
  end=1970,
  freq=1
)
lkhu = window(
  LakeHuron,
  start=1875,
  end=1970,
  freq=1
)

labels=1875
for ( i in seq( 1879, 1971, 4 ) ) labels=c( labels, rep( NA, 3 ), i )
labels=c( labels[ 1:95 ], 1970 )
labels[45]=NA

plot(
  x=lkhu,
  y=nile,
  xy.labels=as.character( labels ),
  xy.lines=FALSE,
  cex=0.68,
  main="Annual Flow Over the Aswan Dam\nagainst Lake Huron Elevation\n1875 to 1970 (selected years)",
  xlab="Elevation in Feet",
  ylab="100 Million Cubic Meters"
)

Listing 5-24Code to demonstrate using x and y time series vectors in plot()

在图 5-24 中,运行清单 5-24 中的代码。

img/502384_1_En_5_Fig24_HTML.jpg

图 5-24

运行 plot()的示例,其中 x 和 y 设置为等于 ts 类的向量

请注意,只绘制了选定的年份。选择是在 plot()调用外部完成的。此外,xy.lines 设置为 FALSE,因此不绘制任何线。

在清单 5-25 中,给出了在 ts 类的矩阵上运行 plot()的示例代码,其中 plot.type 设置为“single”。

plot(
  as.ts(
    cbind(
      lkhu,
      nile,
      snpt
    )
  ),
  plot.type="single"
)

title(
  main=c(
    "Example of Setting plot.type to \"single\"",
    "Aswan Flow, Lake Huron Elevation, and Sunspot Numbers"
  )
)

Listing 5-25Code for the example of using plot() on a time series matrix with plot.type set to “single”

在图 5-25 中,运行清单 5-25 中的代码。

img/502384_1_En_5_Fig25_HTML.jpg

图 5-25

在 plot.type 设置为“single”的 ts 类矩阵上使用 plot()的示例

请注意,对于 y 轴上的比例,休伦湖的海拔变化很小,因此数据看起来像一条直线。x 轴和 y 轴上的标签是默认绘制的标签-时间和 x 参数的值。

在清单 5-26 中,给出了在 ts 类矩阵上运行 plot()的示例代码,plot.type 等于"multiple",mar 等于c( 0.3, 5.1, 0.3, 5.1 )(参见第 6.2.1.2 节)。

plot(
  as.ts(
    cbind(
      lkhu,
      nile,
      snpt
    )
  ),
  plot.type="multiple",
  yax.flip=TRUE,
  mar.multi=c( 0.3, 5.1, 0.3, 5.1 )
)

Listing 5-26Code for the example, in Figure 5-26, of setting plot.type to “multiple” in plot.ts(). The argument mar.multi is also set

在图 5-26 中,运行清单 5-26 中的代码。

img/502384_1_En_5_Fig26_HTML.jpg

图 5-26

在 ts 类的矩阵上运行 plot()的示例,其中 plot.type 设置为“multiple ”, mar . multi 设置为

请注意,绘图类型为“多重”(默认)。参数 yax.flip 已设置为 TRUE,因此 y 轴注释位于第二个图的右侧。通过将 mar.multi 的第一个和第三个值设置为 0.3,在图之间增加了一个小的边距。

无法更改 y 轴标签–标签被设置为等于 x 中时间序列的名称。标题是默认标题,是参数 x 的值。

茨克内尔方法

核用于平滑数字向量,通常是数据在空间或时间上均匀分布的向量。核由用于在平滑过程中加权连续数据点的数字向量组成。这些数字是由特定的过程产生的。

plot()的 tskernel 方法绘制 tskernel 类的对象。tskernel 类的对象是由 kernel()函数创建的。kernel()函数创建可用于平滑时间序列的内核。

plot.tskernel()函数接受五个指定的参数以及 plot.default()使用的许多参数。指定的参数是 x,用于 tskernel 类的对象,以及标准类型 xlab、ylab 和来自 plot.default()的 main(参见第 3.2.1 节和第 3.3.1 节)。

对于直方图,type 的默认值为“h ”;xlab 的是“k”;ylab 的是“W[k]”;而 main 的是 attr(x,“name”)。

在清单 5-27 中,给出了图 5-27 中绘制时间序列内核的示例代码。

img/502384_1_En_5_Fig27_HTML.jpg

图 5-27

对 tskernel 类的对象运行 plot()的示例。绘制了 m 等于 5 的丹尼尔核

par(
  oma=c( 1, 1, 2, 1 )
)

exa=kernel(
  "daniell",
  m=5,
  name="exa"
)

plot(
  exa
)

mtext(
  "Example of Using plot() on an Object of the tskernel Class",
  outer=TRUE
)

Listing 5-27Code for the example of plotting a time series kernel

在图 5-27 中,运行清单 5-27 中的代码。

注意,Daniell 内核给出的内核宽度是 m 的两倍加一,并且内核中的每个权重都具有相同的值。内核权重总和为 1。(前面的内核适用于每年的太阳黑子数据,因为内核的宽度为 11。)

六、图形设备和布局图

在 R 中,绘图是在图形设备上绘制的。假设选择了图形设备,可以在该设备上绘制具有多个绘图的图形。在这一章中,我们列出了图形设备,并给出了一些与设备一起工作的函数。然后,我们给出几种方法来设置图形设备,通过使用 par()、layout()或 split.screen()在一个图形中绘制多个图。前面章节中没有涉及的 par()的任何参数都包括在内,其中大部分都与设备区域、图形区域、绘图区域、边距和多个绘图布局有关。

6.1 图形设备和使用图形设备

r 中有几种可用的图形设备,有些是依赖于操作系统的。有些以标准打印格式创建文件。有些是 RStudio 内部的。例如,一些可用的设备是 Microsoft Windows 的标准设备、创建 pdf 文件的设备以及 Apple MacBook 上的默认 RStudio 设备。在第 6.1.1 节中,描述了 R 中目前可用的各种设备。第 6.1.2 节给出了使用设备的方法。

图形设备

图形设备指定创建打印的位置。一些图形设备在计算机的屏幕上打开,而其他的打开一个文件(或多个文件),当设备关闭时,该文件被写入一个位置。该位置可以是 URL、计算机上的文件夹、管道、套接字或打印机。

默认图形设备是在调用绘图功能时打开的图形设备,但图形设备尚未专门打开。当在 R 控制台输入options("device")时,默认设备由返回值给出。(在我电脑上的 RStudio 中,图形设备是"RStudioGD",设备在 RStudio 的右下窗口打开一个地块。)

到图形设备的链接,除了默认的,都列在设备的帮助页面上。列出了打开图形设备的 14 个函数的链接。一些链接包括一个以上的功能。一些图形设备依赖于操作系统。其他依赖于 Ghostscript 网站(pdf 文件和 PostScript 语言的解释器)的存在或对 X Window 系统服务器的访问。其他一些要求 R 已经用 cairo(图形程序库)或 X Window System (X11)支持编译。

依赖于操作系统的函数是 windows()(也称为 win.graph()、win.metafile()和 win.print()),用于 MS Windows 系统;quartz()(和 quartz.save()),用于当前的 OS X 系统;x11()(或 X11()),用于使用 X Window 系统图形的系统(包括 MS Windows 和类似 UNIX 的系统,例如 UNIX、LINUX 和早期的 OS X 系统)。函数 windows()、X11()和 quartz()在计算机屏幕上打开图形设备窗口。

应该在任何系统上运行并创建外部文件的函数有 pdf(),用于可移植文档格式文件,以及 postscript(),用于 PostScript 文件。此外,函数 xfig()以 Xfig 使用的格式创建文件,pictex()创建 TeX/PicTeX 文件。函数 bitmap()(也叫 dev2bitmap())使用 Ghostscript 接口并创建 bmp 文件。

如果 R 已经用 cairo 编译过运行的函数有 cairo.pdf(),对于 pdf 文件;cairo.ps(),用于 PostScript 文件;和 svg(),用于可缩放的矢量图形文件。我的 R 版本——2020 年中期加载时的最新默认版本——不运行 cairo 函数。

位图文件的 bmp()函数、联合图像专家组文件的 jpeg()函数、可移植网络图形文件的 png()函数和标记图像文件的 tiff()函数运行在支持 cairo、X11 或 Quartz 的系统上,这些系统是大多数系统。默认情况下,该函数首先检查 cairo 是否可用。如果没有,该函数将检查 X11。如果 X11 不可用,该函数将检查石英窗口是否可用。使用哪个选项可以在函数调用中设置。我的 R 版本运行四个函数。

使用图形设备

在本节中,我们将介绍如何使用图形设备,包括默认的绘图设备。大多数管理图形设备并与之交互的功能都是从 dev 开始的。,以及以 dev 开头的函数。所有影响图形设备。影响图形设备的另一个函数是 graphics.off()。

在 RStudio 中,默认图形设备在绘图窗口中打开一个绘图(在右下窗口的绘图选项卡下)。给定一个已经打开的图,对于如何处理该图有许多选项。

可以通过拖动窗口的左侧和/或顶部手柄来调整窗口的大小。(当悬停在左侧或顶侧的中心时,手柄显示为双箭头。如果窗口没有扩展到最大高度,箭头只会出现在顶部。)

通过选择图上方的缩放选项卡,可将窗口缩放至屏幕上的独立窗口。然后可以通过拖动手柄来调整绘图的大小。(如果窗口最大化到全屏,手柄不会出现。否则,会出现顶部、底部、左侧、右侧和角部手柄。)

该图可以导出到图像文件中。要导出到图像文件,在绘图窗口中选择绘图上方的导出选项卡,然后选择另存为图像… 。在打开的窗口中,选择更新预览查看绘图。

给出了改变绘图大小的选择。如果宽度和/或高度改变,通过选择更新预览更新绘图。(否则,窗口会关闭。)图像文件的格式有六种选择:PNG、JPEG、TIFF、BMP、SVG 和 EPS。保存文件时,文件扩展名会自动添加到文件名中。

要导出为 pdf 文件,选择导出选项卡,然后选择另存为 PDF … 。pdf 格式的选择包括方向(纵向或横向)和大小(英寸)。尺寸选项包括美国字母美国法定A4 。要预览生成的 pdf,选择预览。选择保存按钮保存绘图。文件扩展名 pdf 会自动添加到文件名中。

要将绘图复制到剪贴板,选择导出,然后选择复制到剪贴板。选项与另存为图像… 相同,只是没有指定文件名。复制的图像是 tiff 格式的。

右键单击该图,可以保存或复制该图。扩展名必须手动添加,可以是 bmp、jpeg、png 或 tiff。

如果生成了多个图,使用缩放选项卡左侧的箭头在图中向前或向后移动。通过选择导出选项卡右侧红色圆圈中的白色十字,可以从绘图窗格中移除一个绘图。要清除所有打开的地块,请选择红色圆圈中白色十字右侧的小扫帚。

在 RStudio 程序的顶部菜单中,有一个选项卡绘制。在选项卡下的选择与图窗格中的选择相同。

在我的 MacBook Air 上的 R 中,默认情况下,绘图在石英窗口中打开。要将图保存到文件中,可以在创建图后运行 quartz.save()函数。分配给文件的名称必须在 quartz.save()中设置。在 windows()的帮助页面中,函数 win.metafile()和 win.print()与 quartz.save()相似,只是这些函数适用于 MS Windows 操作系统。

打开的设备被分配名称,并按顺序编号(在我的设备上,编号 3-8 被跳过)。编号为 1 的设备是空设备,未被使用。开放设备的编号从 2 开始,最大可达 63。设备通过编号来引用。

函数的作用是:返回当前设备的名称和编号。函数的作用是:列出所有打开的设备的名称和数量。

dev.next()和 dev.prev()函数返回下一个或上一个设备的名称和编号。这两个函数有一个参数,它是从哪个设备开始查找下一个或上一个设备的编号。(参数的默认值是 dev.cur()。)设备周期数,不包括设备 1。如果没有打开的设备,dev.next()和 dev.prev()分别返回空设备1

函数告诉 R 哪个设备是当前设备。该函数有一个参数,用于将设备的编号设置为当前值。其默认值是 dev.next()。

函数的作用是:关闭一个设备。该函数有一个参数,表示要关闭的设备的编号。默认值是 dev.cur(),即当前设备。函数的作用是:关闭所有打开的设备。

函数的作用是:打开一个新的设备。该函数采用一个指定的参数加上几个未指定的绘图参数,这些参数将应用于打开的设备。一个指定的参数是 noRStudioGD,用于在 RStudioGD 是默认设备的情况下是否使用设备 RStudioGD。(默认设备是getOption("device")的值。)noRStudioGD 的默认值为 FALSE,即如果 RStudioGD 是默认设备,则使用 RStudioGD。

函数的作用是:将当前设备的设置和内容复制到一个新的设备上。复制后,如果更改了绘图,大多数设置不会受到影响。虽然复制了原始设备的大部分参数,但宽度和高度没有复制。

该函数有两个指定的参数——device 和 which——但只接受其中一个,而不是两个。参数设备采用绘图函数的名称。只需输入函数的名称。函数的参数按名称添加,并以逗号与其他参数和 device 值分隔开。

接受长度为 1 的数字向量的自变量。参数的值是一个设备号。当前设备的内容被复制到由。设备必须在复制完成前打开,并且设备不能复制到自身。

除了两个可能的指定参数之外,如果已经设置了 device,还可以设置由 device 设置的函数的参数。如果设置了,则可以设置正在复制的设备的参数。复制设备后,设置和内容复制到的设备将成为当前设备。

dev.copy2pdf()和 dev.copy2eps()函数将设备的内容复制到 pdf、Quartz、cairo 或 PostScript 文件中。有关更多信息,请参见 dev.copy()的帮助页面。

dev.print()函数将图形设备的内容复制到打印机,默认为 PostScript 格式。文件被发送到与运行 R 的计算机相连的默认打印机。有关更多信息,请参见 dev.copy()的帮助页面。

如果内存是一个问题,并且绘图从不调整大小,那么运行dev.control(displaylist="inhibit")使用较少的内存。有关更多信息,请参见 dev.copy()的帮助页面。

图 6-1 中给出了一个使用 quartz()、dev.cur()、dev.copy()、dev.set()和 dev.list()的例子。请注意,设备的编号在图上方的标题中。

img/502384_1_En_6_Fig1_HTML.jpg

图 6-1

R 的控制台截图,带有使用 dev.cur()、dev.copy()、dev.new()、dev.set()和 dev.list()的示例

dev.capabilities()、dev.interactive()和 dev.size()函数查询当前图形设备。dev.capabilities()函数返回设备的功能,其行为类似于函数 options()。dev.interactive()函数返回设备是否交互。dev.size()函数以英寸为单位返回设备的大小。

有五种设备功能:transparentBackground(值为“否”、“完全”和“半”)、rasterImage(值为“否”、“是”和“非图像”)、capture(逻辑,如果图形设备可以捕获光栅图像,则为 TRUE)、locator(逻辑,如果支持 locator()和 identify()函数,则为 TRUE)和 events(可能值为“MouseDown”、“MouseMove”、“MouseUp”和“Keybd”)。)

orNone 参数(取值 TRUE 和 FALSE)由 dev.interactive()使用。如果设置为真,该函数还检查getOption("device")的值是否是交互式的。可以在 dev.size()中设置单位参数(可能的值为“in”、“cm”和“px”,分别表示英寸、厘米和像素)。

dev.capture()函数从图形设备的内容中创建一个光栅图像。并非所有图形设备都支持光栅图像的创建;如果不是,当 dev.capture()运行时,图形设备返回 NULL。

该函数采用一个参数 native。该参数采用长度为 1 的逻辑向量。如果设置为 FALSE,则返回颜色值矩阵。如果设置为 TRUE,则返回 nativeRaster 类的对象。

如果图形设备有一个保持级别堆栈,可以使用函数 dev.hold()和 dev.flush()。该函数有一个参数 level,它应该是一个非负整数。有关更多信息,请参见 dev.hold()的帮助页面。

6.2 par()、layout()和 split.screen()函数

par()函数设置绘图参数。par()的帮助页面上列出了 72 个参数。第三章已经介绍了大部分参数。本节介绍的是只能在 par()中设置的参数,只能查询的参数,以及在 par()中与在 plot()函数中具有不同效果的参数。

par()函数、layout()函数和 split.screen()函数的一些参数允许在图形页面上绘制多个图。第 6.2.1 节介绍了 par()的参数,这些参数在 par()中设置时表现不同,或者在第三章中没有涉及。第 6.2.2 节介绍了功能布局()。第 6.2.3 节描述了 split.screen()函数。

par()函数

plot()和其他绘图函数使用的许多参数都从 par()的参数中获取默认值。通过使用 par(),可以为整个绘图会话设置参数,而不是在每个绘图的调用中设置参数。

par()中的参数可以通过在对 par()的调用中的括号内输入用引号括起来的参数名称来查询,参数名称之间用逗号分隔。例如,运行par( "bg", "fg" )会返回$bg [1] "white"$fg [1] "black"。如果不带参数调用 par(),将返回所有 72 个参数以及参数的值。

要在 par()中设置参数,请将参数设置为与要设置的值相等,用逗号分隔。例如,par( lwd=2, lty="dotted" )将线宽设置为 2,将线型设置为虚线。

图形设备分为三个部分:设备、设备中的图形和图形中的绘图。可以设置设备边缘和图形之间的边距大小。每个图形都有环绕图形的边距。可以设置图周围的边距大小。

本节分为五小节。这些子部分涵盖了设备区域、图形区域、绘图区域、字符属性和页面上的多个绘图。

6.2.1.1 设备区域

查询或设置控制图形设备区域的值的 par()的参数是 din、oma、omi、omd 和 bg。din 参数是一个只能查询而不能设置的参数。该参数以英寸为单位给出了图形设备的宽度和高度。

oma、omi 和 omd 参数只能在 par()中设置,它们使用三种不同类型的单位来设置外部边距的大小。oma 参数接受一个长度为 4 的数字向量,并以行宽度给出边距的大小。这四个值分别用于下边距、左边距、上边距和右边距。oma 的默认值是c(0,0,0,0),即没有外边距。

omi 参数类似于 oma,只是单位是英寸。omi 的默认值也是c(0,0,0,0)

omd 参数以标准化设备坐标(NDC)单位设置设备区域的内角。该参数采用一个四元素数值向量,其中的值介于 0 和 1 之间,包括 0 和 1。

第一个数字是图形设备左侧和图形区域左侧之间的距离,以图形设备底部的比例(即,在标准化设备坐标中)来测量。第二个数字是从图形设备左侧到图形区域右侧的距离,以标准化设备坐标测量。

第三个数字是从图形设备底部到图形区域底部的距离,用标准化设备坐标测量。第四个数字是从图形设备底部到图形区域顶部的距离,以标准化设备坐标度量。omd 的默认值是c(0,1,0,1), that is, no margins

bg 参数给出了图形设备的背景颜色。颜色覆盖整个设备。(参数在 par()中的行为不同于在创建绘图的函数中的行为。)根据 par()的帮助页面,如果在 par 中设置了 bg,那么新的自变量被设置为 FALSE(参见 6.2.1.5 节的最后一部分)。bg 的默认值是“透明”或“白色”(更多信息请参见 par()的帮助页)。

6.2.1.2 图形区域

在外部边界的内部界限内可以有一个或多个图形。在这一节中,我们只讨论一个图形的情况。6.2.1.5 一节涵盖了多个数字。

图形区域是一个区域,在该区域中绘制了图形,通常还绘制了图形的注释。在图形区域内,绘图区域周围通常有一个边距(位于外部图形界限和绘图区域之间)。默认情况下,打印注释位于图形边距内。

影响图形区域和图形区域边距的参数有 fig、fin、mar 和 mai。参数只能在 par()中设置。

fig 参数给出了绘图区域的左侧、右侧、底部和顶部相对于标准化图形区域坐标(参照图形区域的外侧)的位置。该参数采用四元素数值向量,值介于 0 和 1 之间,包括 0 和 1。对于单个图,fig 的默认值为c(0,1,0,1)

fin 参数以英寸为单位给出图形区域的大小。该参数采用两个元素的数值向量。第一个值给出图形区域的宽度,第二个值给出高度。对于单个图,fin 的默认值是 din 的值。

mar 参数给出了以线宽度量的图形边距的大小。该参数采用一个四元素的数值向量,给出了下、左、上、右边距的大小。mar 的默认值为c(5.1, 4.1, 4.1, 2.1)

mai 参数给出了以英寸为单位的数字边距的大小——底部、左侧、顶部和右侧。mai 的默认值为c(1.02, 0.82, 0.82, 0.42)

6.2.1.3 绘图区

绘图区域包含绘图。影响绘图区域和绘图的参数有 pty、plt、usr、pin、xlog、ylog、ylbias 和 fg。除了 fg 之外的都只能在 par()中设置。

pty 参数给出了要使用的绘图区域形状的类型。该参数采用一个单元素字符向量。可能的值是“m”和“s”。值“m”告诉 R 在图形区域的边界内最大化绘图。值“s”告诉 R 使用正方形绘图区域。pty 的默认值是“m”。

plt 参数以标准化设备坐标(x1、x2、y1 和 y2)给出绘图区域的左侧、右侧、底部和顶部的位置,以图形区域为参考。该参数采用长度为 4 的数值向量,值介于 0 和 1 之间,包括 0 和 1。对于单个图,plt 的默认值取决于图的纵横比。

usr 参数以绘图单位(用户单位)给出绘图区域的左侧、右侧、底部和顶部的位置。例如,如果图的 x 轴从 0 到 10,y 轴从 0 到 5,在默认条件下,usr 的值将是c( -0.4, 10.4, -0.2, 5.2 )

要获得图限,将 0.04 乘以 10,然后从 x 下限中减去,再加到 x 上限中,同时从 y 下限中减去 0.04 乘以 5,再加到 y 上限中。(更多信息参见第 3.4.5 节中对 xaxs 和 yaxs 的描述。)在给定数据和轴限制的情况下,usr 的值是恒定的,也就是说,usr 不取决于图形的纵横比或大小。

pin 参数以英寸为单位给出绘图区域的大小。该参数采用两个元素的正数值向量,给出宽度和高度。pin 的默认值取决于图形区域和边距的大小。par( "pin" )[1]的值加上 par( "mai" )[ c( 2,4 ) ]的和得到 par( "fin" )[1]。同样,par( "pin" )[2]加到 par( "mai" )[ c( 1,3 ) ]的和上,得到 par( "fin" )[2]。

xlog 和 ylog 参数用于将 x 轴和 y 轴设置为对数刻度,而不是线性刻度。(对数标度是以 10 为基数,而不是以 e 为基数。)如果设置为 TRUE,默认情况下,不创建新图的所有函数都使用各自的对数刻度。但是,如果调用新的绘图,xlog 的值将设置为 FALSE。xlog 和 ylog 的默认值是 FALSE。在清单 6-1 中,给出了使用 xlog 的示例代码。

> par( xlog=TRUE )
> par( "xlog" )
[1] TRUE
> plot( c( 0, 2.5 ), c( 1, 200 ), type="n" )
> par( "xlog" )
[1] FALSE
> par( xlog=TRUE )
> lines( 1:200, 1:200 )
> lines( 1:200, 200:1 )
> title( main="Example of Setting xlog in par()")

Listing 6-1An example of changing xlog to TRUE in par()

在图 6-2 中,给出了清单 6-1 中代码的结果。

img/502384_1_En_6_Fig2_HTML.jpg

图 6-2

在 par()中设置 xlog 的示例

ylbias 参数给出了通过 axis()或 mtext()输入的文本的偏移量。对于底部和顶部的文本,ylbias 的较小值绘制在较大值绘制的下方。对于左侧和右侧的文本,ylbias 的较小值绘制在较大值绘制位置的右侧。ylbias 的默认值为 0.2。

如果在 par()中设置 fg 参数,并且如果在 par()中未设置 col,则 fg 参数给出刻度线、轴、点、线和文本的颜色。(如果 fg 和 col 都在 par()中设置,则刻度线是 fg 给定的颜色,轴、点、线和文本是 col 给定的颜色。)该参数采用颜色值的单元素向量(有关颜色值的信息,请参见第 3.4.1 节)。fg 的默认值通常是“黑色”,这取决于打开的设备的种类。

6.2.1.4 文本和线宽参数

本节中的参数与字符的大小和字符所在行的高度有关。本节包含七个参数:cra,表示栅格中的字符大小;cin,表示字符大小,单位为英寸;csi,为字符的高度,单位为英寸;cxy,为用户坐标中的字符大小;mex,表示页边距中从线宽到英寸的转换级别;lheight,为多行文本使用的行高;和 ps,表示文本的磅值。只能查询而不能设置 cra、cin、csi 和 cxy 参数。mex、lheight 和 ps 参数只能在 par()中设置。

cra、cin 和 cxy 参数的值是两个元素的数值向量。第一个元素给出字符的宽度,分别以栅格、英寸和用户坐标为单位,第二个元素给出高度。csi 参数是一个单元素数值向量。csi 的值给出了以英寸为单位的字符高度。

栅格是用颜色填充的正方形。图形图像由栅格组成。根据 par()的帮助页面,如果像素对设备有意义,R 栅格中的像素就是像素。否则,栅格通常为 1/72 英寸。

在我的设备上,cra 的值是c( 10.8, 14.4 ),cin 的值是c( 0.15, 0.20 ),csi 的值是c( 0.2 )。cxy 的值取决于图形的长宽比和大小。

mex 参数采用单元素数值向量。该值是绘图页边空白中的线宽从缺省值“无调整”扩展的量。该参数不影响轴标签和轴刻度标签的大小,但会影响刻度的长度。如果线宽增加,R 将缩小绘图以适应更大的边距。mex 的默认值是 1。

lheight 参数采用一个单元素数值向量。该值是 text()生成的文本的行高(根据 par()的帮助页面,由 strheight()测量)。lheight 的默认值是 1。该参数仅在调用 plot()和调用 text()之间设置时有效。

ps 参数以栅格形式给出轴标签、轴刻度标签和标题中文本的磅值,以及函数 text()生成的文本。对于点,绘图字符的大小不受影响。ps 的默认值是 12。

6.2.1.5 使用 par()生成多个地块

par()函数可用于设置图形设备来绘制多个图。使用 mfcol 或 mfrow 参数设置包含绘图的网格。每个图都绘制在网格的一个正方形中。

在查看 par()中的相关参数之前,先讨论一下 plot.new()。创建独立图的函数,如 plot()或 curve(),有时会调用函数 plot.new()。函数 plot.new()关闭前一个图并打开一个新图。该函数不接受任何参数。当处理多个图时,使用 plot.new()有时是有意义的。例如,通过设置 mfcol 或 mfrow 生成多个绘图时,调用 plot.new()而不添加绘图将跳过绘图网格的一个块。

多个图的参数如图所示(来自第 6.2.1.2 节);mfcol,表示图网格中的行数和列数,其中图首先沿列向下绘制;mfrow,与 mfcol 相同,不同之处在于图首先跨行绘制;mfg,当设置了 mfcol 或 mfrow 时,表示上一个图的绘制位置或下一个图的绘制位置;page,用于在下次调用 plot.new()时是否绘制新页面;询问,在打开新页面时是否暂停,并在进入下一页之前询问响应;和新,用于是打开新地块还是过度绘制现有地块。参数页只能查询,不能设置。其他参数只能在 par()中设置。

fig 参数可用于在图形设备上绘制多个图。Setting fig 是一个四元素向量,它以规范化的设备坐标给出图形在图形设备上的位置,将图形放在图形设备上的有限位置。通过用一个新的位置调用 par(),并在 par()中将 new 设置为 TRUE(参见 6.2.1.5 一节的最后一部分),可以绘制更多的图形。在清单 6-2 中,给出了在图形设备上绘制三个图形的示例代码。

par(
  ps=9,
  mar=c( 4, 4, 2, 1 ),
  oma=c( 0, 0, 2, 0 )
)

par(
  fig=c( 0.1, 0.49, 0.1, 0.8 )
)

plot(
  1:10,
  main="Plot 1"
)

par(
  fig=c( 0.5, 0.85, 0.5, 0.95 ),
  new=TRUE
)

plot(
  1:10,
  main="Plot 2"
)

par(
  fig=c( 0.6, 0.9, 0.0, 0.45 ),
  new=TRUE
)

plot(
  1:10,
  main="Plot 3"
)

mtext(
  "Example of Using fig and new in par()",
  outer=TRUE,
  cex=1.5,
  font=2
)

Listing 6-2Code for an example of plotting three figures on a graphics device using fig and new in par()

在图 6-3 中,运行清单 6-2 中的代码。

img/502384_1_En_6_Fig3_HTML.jpg

图 6-3

使用 fig 和 new in par()在页面上放置多个图的示例

请注意,在本例中,磅值已减少到 9,并且下边距已减少到 4 行宽,左边距减少到 4 行宽,上边距减少到 2 行宽,右边距减少到 1 行宽。以上述方式绘制多个图形时,图形可能会重叠。

mfcol 和 mfrow 参数采用两个元素的整数向量,第一个元素设置为等于绘图网格中的行数,第二个元素设置为等于列数。两者只设置一个。mfcol 和 mfrow 的默认值都是c(1, 1)

在清单 6-3 中,给出了图 6-4 中设置 mfcol 和 mfrow 的示例代码。

img/502384_1_En_6_Fig4_HTML.jpg

图 6-4

在 par()中设置 mfcol 和 mfrow 的示例

plotter = function( words ) {
  plot(
    c( 0, 1 ),
    c( 0, 1 ),
    type="n",
    ann=FALSE,
    axes=FALSE,
    frame=TRUE
   )

   text(
     0.5,
     0.5,
     words,
     cex=2,
     font=2
   )
}

par(
  oma=c( 0, 0, 4, 0 ),
  mfcol=c( 2, 2 )
)

plotter(
  "PLOT ONE"
)
plotter(
  "PLOT TWO"
)
plotter(
  "PLOT THREE"
)
plotter(
  "PLOT FOUR"
)

mtext(
  "Example of Setting mfcol",
  outer=TRUE,
  font=2,    cex=2
)

box(
  which="outer",
  lwd=4
)

par(
  mfrow=c( 2, 2 )
)

plotter(
  "PLOT ONE"
)
plotter(
  "PLOT TWO"
)
plotter(
  "PLOT THREE"
)
plotter(
  "PLOT FOUR"
)

mtext(
  "Example of Setting mfrow",
  outer=TRUE,
  font=2,
  cex=2
)

box(
  which="outer",
  lwd=4
)

Listing 6-3Code for the examples of setting mfcol and mfrow

在图 6-4 中,显示了清单 6-3 中的代码生成的两个图。

mfg 参数采用两个或四个元素的整数向量。如果查询(par( "mfg" )),则返回最后绘制的绘图的行和列,以及绘图网格中的行数和列数。如果设置,则设置下一个图的行和列。两个数字都必须包括在内。可选地,可以包括绘图网格中的行数和列数。例如,对于设置为等于c( 3, 2 )的 mfrow,要将下一个图输入到网格的第 2 行第 1 列,mfg 将在对 par()的调用中设置为c( 2, 1 )c( 2, 1, 3, 2

该参数仅影响在绘制了网格中的第一个图之后绘制的图的位置,无论 mfg 的值是多少,它总是被放置在矩阵的第一个单元中。如果矩阵的最后一个单元格中没有最后一个图,则在绘制新的图时不会打开新的页面。相反,R 按照从使用的最后一个单元到矩阵中的最后一个单元的顺序超量绘制单元。mfg 的默认值是c(1, 1, 1, 1)

页面参数是长度为 1 的逻辑向量。如果该值为 FALSE,则下一次调用 plot.new()不会打开新的绘图。如果该值为 TRUE,则在下次调用 plot.new()时会打开一个新的绘图。如前所述,只能查询页面。

ask 参数采用长度为 1 的逻辑向量。如果设置为 TRUE,当打印新页面时,R 要求在继续之前继续下一页。如果设置为 FALSE,R 不会询问。根据 par()的帮助页面,参数 ask 已被弃用,应由 devAskNewPage()函数替换。ask 的默认值为 FALSE。

新参数采用长度为 1 的逻辑向量。如果设置为 TRUE,当发生对 plot.new()的新调用时,R 不会转到新页面。如果设置为 FALSE,调用 plot.new()将重置页面。new 的默认值为 FALSE。

6 . 2 . 2 layout()、layout.show()和 lcm()函数

layout()函数提供了另一种创建包含多个图的页面的方法。这些图被放置在由具有网格尺寸的矩阵建立的网格中。与使用 mfcol 和 mfrow 的主要区别在于,一个图可以分布在矩阵的多个单元上。

在调用 layout()之后,可以使用 layout.show()函数来显示单元格的结构。lcm()函数可以在 layout()中使用,以厘米为单位给出单元格的绝对尺寸。

layout()函数有四个参数。自变量是 mat,对于包含网格的矩阵;宽度,用于列的宽度;高度,为行的高度;并尊重水平和垂直刻度是否相关或如何相关。

mat 参数采用一个整数矩阵,其结构与绘图网格的结构相同。如果网格中要绘制 n 个图,则单元格必须包含从 1 到 n 的所有整数。

矩阵的单元格中也可以包含 0,因为单元格中没有绘制任何图。此外,多个单元格可以包含相同的数字。如果单元格是相邻的,则绘图会扩展以填充单元格。mat 没有默认值。

widths 参数给出了单元格的宽度,并接受一个长度等于 matrix mat 中列数的数值向量。除非在设置宽度值时使用 lcm(),否则宽度与图形设备的大小相关。宽度的默认值是rep.int(1, ncol(mat))

heights 参数类似于 widths,但它给出的是单元格的高度值,而不是宽度值。高度的默认值为rep.int(1, nrow(mat))

“尊重”参数用于限制网格在水平和垂直方向的缩放。该参数可以采用单元素逻辑向量,也可以采用与 mat 大小相同且包含 0 和 1 的矩阵。

如果“尊重”设置为 FALSE,水平方向的单位不一定与垂直方向的单位具有相同的比例。如果设置为 TRUE,单位的缩放比例相同。

如果将“尊重”设置为矩阵,并将某行设置为 0,则在缩放绘图时,该行可以自由缩放。如果行包含 1,则行的小数位数和列的小数位数之间的关系是固定的。在列中设置全 0 的行为与在行中的行为相同,只是允许列自由缩放。尊重的默认值是假的。

layout.show()函数有一个参数 n——表示布局中要显示轮廓的单元格数量。该参数采用单元素整数向量,可以是 1 到绘图数之间的任何值,包括 1 和绘图数。n 的默认值为 1,即显示包含第一个图的单元格的轮廓。

lcm()函数有一个参数 x——表示要转换为厘米的值。该参数采用一个以厘米为单位的数值向量。该函数返回一个包含长度和字母“cm”的字符向量。比如运行lcm( c( 1, 1.5, 0.5 ) )给出[1] "1 cm" "1.5 cm" "0.5 cm"。x 没有默认值。

在清单 6-4 中,给出了图 6-5 中使用函数 layout()和 layout.show()的示例代码。

img/502384_1_En_6_Fig5_HTML.jpg

图 6-5

调用 layout()和 layout.show()的示例。参数 mat、widths、heights 和 respect 在 layout()中设置

par( oma=c( 0, 0, 4, 0 ) )

layout(
  matrix(
    c(
      1, 3, 0,
      2, 3, 4
    ),
    2,
    3,
    byrow=TRUE
  ),
  width=c( 1, 1.5, 0.5 ),
  height=c( 1, 1 ),
  respect=FALSE
)

layout.show(
  4
)

mtext(
  "Example of calling layout.show()",
  cex=1.5,
  font=2,
  line=1.5,
  outer=TRUE
)

plot(
  0:1,
  main="Plot 1"
)
plot(
  0:2,
  main="Plot 2"
)
plot(
  0:3,
  main="Plot 3"
)
plot(
  0:4,
  main="Plot 4"
)

mtext(
  "Example of calling layout()",
  cex=1.5,
  font=2,
  line=0.8,
  outer=TRUE
)

Listing 6-4The code for the example in Figure 6-5 of using the functions layout() and layout.show()

图 6-5 中给出了调用 layout()和 layout.show()的例子。

注意,绘制了四个图。网格矩阵有两行和三列。mat 的第二列中的数字都是 3,所以第三个图跨越了两行。第一行和第三列中的数字为 0,因此在与第一行和第三列相关的单元格中不会绘制任何图。两行的高度相同,但列的宽度不同。

6 . 2 . 3 split . screen()、screen()、erase.screen()和 close.screen()函数

split.screen()函数查询图形设备或屏幕,或者将图形设备或屏幕分割成屏幕(区域和子区域)。就绘图而言,每个后续屏幕都是单独处理的。如果在 split.screen()运行之前没有打开图形设备,split.screen()将打开 R 或 RStudio 的默认图形设备。

在 split.screen()设置屏幕后,screen()、erase.screen()和 close.screen()函数与屏幕一起工作。函数的作用是:设置或返回当前屏幕,也就是完成绘图的屏幕。函数的作用是:删除屏幕上的内容。函数的作用是:关闭屏幕。关闭屏幕后,不能再对屏幕内容进行任何更改。关闭所有屏幕后,split.screen()会话结束。

根据 split.screen()的帮助页,该函数不能与 par()或 layout()中的 mfcol 或 mfrow 一起使用。但是,par()的大多数参数都是可以设置的。(使用不同于默认值的 par()值设计图形时,每次运行 split.plot()时都运行 par()有助于减少该过程的挫折。)

如果不带参数运行,函数 split.screen()返回所有打开的屏幕的编号,如果没有打开的屏幕,则返回 FALSE。如果带参数运行,该函数将为屏幕设置和分配编号名称。

该函数有三个参数。论据是无花果,为分割屏幕的方式;屏幕,为哪个屏幕拆分;和擦除,用于是否擦除由自变量屏幕选择的屏幕。

figs 参数采用两元素数值向量或四列数值矩阵。如果 figs 是一个向量,这两个元素给出了绘图网格的行数和列数。如果 figs 是一个矩阵,那么对于矩阵中的每一行,四个元素按照给定的顺序给出了屏幕左侧和右侧(在 x 轴上)以及屏幕底部和顶部(在 y 轴上)的位置。图没有默认值。

如果将 figs 设置为矩阵,则矩阵的值采用标准化设备坐标单位(取 0 和 1 之间的值,包括 0 和 1)。)单位是相对于所选屏幕测量的。每个屏幕有一行。屏幕可以重叠。

由 screen 参数指定的数字是要拆分的屏幕的编号。如果没有设置屏幕,则图形设备被拆分。

该参数采用一个元素的整数向量。对于 split.screen()的第一次调用,screen 参数没有设置为值(或者 screen 可以设置为 0)。第一次调用后,该号码必须在已分配给屏幕的号码范围内,默认值是当前屏幕的号码。

erase 参数采用单元素逻辑向量。如果设置为 TRUE,当屏幕打开时,屏幕内容将被删除。如果为 FALSE,则不会删除内容。erase 的默认值为 TRUE。

(根据 split.screen()、screen()和 erase.screen()中 split.screen()的帮助页面,擦除内容包括将屏幕设置为 par()中 bg 值给定的颜色,默认情况下通常是“透明的”。在 bg 的默认值为“透明”的情况下,如果 bg 没有被手动设置为除“透明”之外的颜色,则屏幕内容保持可见。)

screen()函数查询或设置当前屏幕(绘图函数创建绘图的屏幕)。如果不带参数运行,该函数将返回当前屏幕的编号。如果新屏幕被设置为当前屏幕,则返回该屏幕的编号。如果没有打开的屏幕,screen()返回 FALSE。

该函数有两个参数。参数为 n,表示要设置为当前屏幕的屏幕编号,以及 new–表示在将屏幕设置为当前屏幕时是否清除屏幕内容。

n 参数接受一个一元正整数向量。该值必须是打开屏幕的编号;否则,会出现错误。n 的默认值是当前屏幕的编号。

新参数采用单元素逻辑向量。如果设置为 TRUE,当某个屏幕被设置为当前屏幕时,该屏幕的内容将被删除(请参阅前面的文本)。如果设置为 FALSE,则内容被过量绘制。new 的默认值为 TRUE。

erase.screen()函数告诉 R 删除屏幕上的内容(参见前面的内容)。该函数采用一个参数 n——要擦除的屏幕编号。

n 参数接受一个一元非负整数向量。如果在 erase.screen()中设置了 n,则该值必须是打开屏幕的编号或为 0。如果有打开的屏幕,并且 erase.screen()在没有参数的情况下运行,该函数将擦除当前屏幕。运行 erase.screen()并将 n 设置为 0 会擦除所有屏幕(如果有任何屏幕是打开的)。如果没有打开的屏幕,erase.screen()返回 FALSE。n 的默认值是当前屏幕的编号。

函数的作用是:关闭屏幕。如果所有屏幕都单独或一起关闭,split.screen()会话将结束。不带参数调用 close.screen()没有任何效果,但会返回保持打开状态的屏幕数量。如果没有打开的屏幕,close.screen()返回 FALSE。

该函数有两个参数:n 表示要关闭的屏幕数量,all.screens 表示是否关闭所有屏幕。

n 参数接受一个正整数向量,该向量可以是合理的任意长度。向量中的数字可以重复,并且可以包括分配给封闭屏幕的数字。如果包括分配给开放屏幕的号码,则大于最大屏幕号码的号码可以在向量中。n 没有默认值。

all.screens 参数采用长度为 1 的逻辑向量。如果设置为 TRUE,则关闭所有打开的屏幕,split.screen()会话结束。如果为 FALSE,则 n 的值控制关闭哪些屏幕。all.screens 的默认值为 FALSE。

在清单 6-5 中,针对图 6-6 中的示例给出了代码,使用图 1-3 的矩阵形式。

img/502384_1_En_6_Fig6_HTML.jpg

图 6-6

使用 split.screen()设置三个屏幕并绘制到三个屏幕的示例

# A function to do the actual plotting

plotter3 = function(
  id=1:3
){
    for ( i in id ) {

      par( oma=c( 0, 0, 3, 0 ) )

      screen( i )

      plot(
        0:i,
        main=paste( "Screen", i ),
        ylab=paste0( "0:", i )
      )

      mtext(
        "Example of split.screen()",
        outer=TRUE,
        cex=1.6,
        font=2,
        line=0.6
      )
    }
}

# Running par(), split.screen(), and plotter3()

par(
  ps=8,
  mar=c( 4, 4, 2, 1),
  oma=c( 0, 0, 3, 0 ),
  mex=0.9,
  bg="white"
)

split.screen(
  matrix(
    c(
      0.00, 0.70, 0.55, 1.00,
      0.00, 0.45, 0.00, 0.80,
      0.55, 1.00, 0.20, 0.80
    ),
    nr=3,
    nc=4,
    byrow=TRUE
  )
)

plotter3(
)

close.screen(
  all.screens=TRUE
)

Listing 6-5Code for the example in Figure 6-6 of using a matrix for the value of figs in split.screen()

在图 6-6 中,运行清单 6-5 中的代码。

请注意,屏幕是随意放置在图形设备周围的。在图中,屏幕 2 和屏幕 3 都与屏幕 1 重叠。函数 par()用于减小磅值、边距宽度和边距中的线宽。此外,在 par()中将背景的颜色设置为白色,并在绘图的顶部添加了一个三线外边距。请注意,每个屏幕都必须设置外部边距。

七、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()的示例。

img/502384_1_En_7_Fig1_HTML.jpg

图 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()")来添加标题。

img/502384_1_En_7_Fig2_HTML.jpg

图 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.rightaxis.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 中的代码。

img/502384_1_En_8_Fig1_HTML.jpg

图 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()中设置四个参数的例子。

img/502384_1_En_8_Fig2_HTML.jpg

图 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 元素在第十部分中被替换。

img/502384_1_En_8_Fig3_HTML.jpg

图 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 节)。

img/502384_1_En_8_Fig4_HTML.jpg

图 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 中的代码。请注意,代码运行了几次,直到产生可接受的数据选择。

img/502384_1_En_9_Fig1_HTML.jpg

图 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 的代码,这是一个创建和绘制网格图形对象的例子。

img/502384_1_En_9_Fig2_HTML.jpg

图 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()。

img/502384_1_En_9_Fig3_HTML.jpg

图 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 中的图的代码。世界地图在地图包里。

img/502384_1_En_9_Fig4_HTML.jpg

图 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()的示例代码。

img/502384_1_En_9_Fig5_HTML.jpg

图 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()的使用及其默认值。

img/502384_1_En_10_Fig1_HTML.jpg

图 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 中。

img/502384_1_En_10_Fig2_HTML.jpg

图 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*引用,其中 parent _ prototype _ function _ name 是原型函数的名称,defined _ function _ name 是原型函数中定义的函数的名称。父原型函数中定义的函数的参数设置在表达式`ggproto_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()的实际例子。

十一、列联表和离散数据图

在表 A-1 中,给出了为离散数据和列联表创建图形的函数。列联表是由函数 table()创建的,其中要包含在表中的变量在对 table()的调用中用逗号分隔,作为 list 对象输入或作为 data.frame 对象输入。

餐桌 A-1

用于绘制列联表和其他形式的离散数据的函数

|

函数名

|

描述

|
| --- | --- |
| assocplot() | 对于二维列联表或数值矩阵(x)。第一个变量绘制在水平轴上,第二个绘制在垂直轴上。像元中的值与该像元的估计期望值之间的差值将绘制为一个矩形,与水平和垂直类相对。矩形的宽度与单元格中的值成比例。默认情况下,负差异显示为红色并标绘下来。正差异用黑色标出。 |
| barplot() | 对于数值向量或矩阵(x)。对于向量,为向量的每个元素绘制一个条,其中条的高度由元素的值给出。对于矩阵,每一行中的值以堆叠或并排的方式绘制在一起。 |
| 四重绘图( ) | 对于 2×2×k 列联表或 2×2 矩阵(x)。对于 k 个类别中的每一个,绘制了显示类别之间关联的度量的图。这些图是圆形的。 |
| heatmap() | 对于数值矩阵(x)。绘制矩阵列的热图。 |
| 镶嵌图( ) | 对于基于多个变量(x)或连接分类变量的公式(formula)的列联表。创建按每个单元格中的计数确定大小并按每个变量中的类排序的正方形。第一个变量在顶部,第二个在左侧,第三个在顶部,第四个在左侧,依此类推。 |
| 饼图( ) | 对于非负数值向量(x)。生成饼图–饼图中切片的面积与向量中的值成比例。 |
| spineplot() | 对于数值或因子向量(x)和因子向量(y)。也可以与二维列联表(x)一起使用,或者与用波浪号将 y 连接到 x 的公式(公式)一起使用。当两个变量都是分类变量时,创建镶嵌图。当 x 是数字时,创建一个旋量图。(对于旋量图,y 中的类被分配不同的颜色,x 被分成等长的容器。x 容器的大小取决于容器中有多少观察值。在每个区域上方绘制了颜色块,给出了该区域内的 y 类观测值。 |

十二、连续变量图

表 B-1 中给出了为连续变量创建图形的函数。连续变量是任何一种数值变量。

表 B-1

绘制连续变量的函数

|

函数名

|

描述

|
| --- | --- |
| 箱线图( ) | 对于一个数值向量(x),多个用逗号(…)分隔的数值向量,一个数值向量列表(x),或一个左边有一个数值向量,右边有一个或多个分类变量(可以是数值)的公式(公式)。绘图框为前三种情况下的变量绘图。绘图框对于公式情况,左侧的变量由右侧的变量绘制。 |
| cdplot() | 对于数字向量(x)和相同长度的分类向量(y)或左边是数字向量、右边是分类变量的公式(公式)。使用条件分类变量绘制条件密度。密度是分层绘制的。在垂直维度中,每个类的条件密度被归一化,使得密度总和为 1。 |
| 点图表( ) | 对于数值向量或矩阵(x)。可以使用 groups 参数进行分组。在 x 值和等于 x 的索引值(或行号)的 y 值处绘制一个点。 |
| 历史( ) | 对于单个数值向量(x)。绘制矢量的直方图。 |
| 匹配打印( ) | 对于两个数字对象,每个都可以是向量或矩阵(x 和 y)。向量的长度和矩阵的行数必须相等。y(或 y,如果 y 是向量)的第一列相对于 x(或 x,如果 x 是向量)的第一列绘制。y 的第二列相对于 x 的第二列绘制,依此类推。如果 y 的列数不等于 x 的列数,则较小矩阵(或向量)的列循环。可以绘制点、线或点和线。这些图都在同一个绘图区域中绘制。 |
| 配对( ) | 对于可以分别用 as.numeric()或 data.matrix()转换为数值的矩阵或数据框(x)。或者用于包含变量的公式,这些变量是可以转换为数字的向量(公式)。针对每个列或向量相对于每个其他列或向量绘制散点图。所有这些都绘制在一个图形中的图形矩阵中。 |
| 茎( ) | 对于数值对象(向量、矩阵或数组)(x)。使用对象中的所有数字创建茎叶图。 |
| stripchart() | 对于单个数字向量(x)、数字向量列表(x)或数字向量在波浪号左侧、分组变量在右侧(x)的公式。分组变量可以是除 raw 之外的任何原子模式。如果 x 是一个列表,对于列表中的每个向量,在向量中的值处绘制一条水平的绘制字符线(默认为正方形)。对于公式,将为每组绘制一条水平线。每个向量或组有一条线。 |

十三、绘制多个图的函数

在表 C-1 中,列出了绘制多个图的函数。

表 C-1

用于绘制多幅图的功能

|

函数名

|

描述

|
| --- | --- |
| 科普洛特( ) | 对于带有两个数值向量和一个或两个条件变量的公式(公式)。条件变量可以是除原始或复杂模式之外的任何原子模式。自变量公式采用 x ~ y | g1 或 x ~ y | g1 + g2 形式的值,其中 x 和 y 是数值向量,g1 和 g2 是条件变量。该函数为每个条件级别生成一个单独的图。这些图从左下角开始,一直到右边。缺省情况下,换行符由 coplot()设置,但是可以在函数调用中设置。 |
| layer.plot( ) | 对于数字向量或矩阵,通常是时间序列(即 ts 或 mts 类)(x)。根据向量或矩阵的滞后值绘制原始向量或矩阵。滞后的数量由参数 lags 设置,或者可以由参数 set.lags 设置特定滞后的数量。对于矩阵,首先绘制第一列的滞后,然后绘制第二列的滞后,依此类推。这些图从左上角开始,一直到右边。默认情况下,该函数设置换行符,但是可以设置布局。 |
| 配对( ) | 参见附录 B 。 |
| 星星( ) | 对于矩阵或数据帧(x)。变量可以是任何模式。绘制星形图、圆锥线段图,或者,如果 locations 参数是一个两元素数值向量,则绘制一个蜘蛛图。对于矩阵和数据框,将为矩阵或数据框的每一行生成一个图。对于蜘蛛图,一个图由矩阵或数据框中的变量组成。该图绘制在由位置给出的点上,看起来有点像蜘蛛网。 |

十四、平滑器

表 D-1 中给出了平滑数据的函数。大多数平滑器不会自动绘制平滑后的数据,这些数据可以通过调用 plot()来绘制(或者在调用 plot()后用 lines()或 points()来绘制)。

表 D-1

平滑数据的函数

|

函数名

|

描述

|
| --- | --- |
| 内核( ) | 对于单元素字符向量或数字向量(coef)。coef 的可能字符串(预设内核)是“daniell”、“dirichlet”、“fejer”或“modified.daniell”。该函数给出了使用内核的平滑器的内核设计。返回 tskernel 类的对象。可以用 plot()绘制。 |
| kernapply() | 对于数字向量或矩阵或 ts、mts 或 tskernel 类(x)和内核(k)的对象。参数 k 被设置为等于对 kernel()的调用。根据 x 的值,kernapply()平滑向量、矩阵的列、时间序列或时间序列矩阵中的单个时间序列。可以用 plot()绘制。 |
| ksmooth() | 对于两个长度相同的数值向量(x 和 y)和一个必须设置为“box”或“normal”的内核(kernel)。使用 Nadaraya-Watson 核回归估计量。可以用 plot()绘制。 |
| 黄土.光滑( ) | 对于长度相同的两个数值向量(x 和 y)。通过局部多项式回归(黄土)方法进行平滑。可以用 plot()绘制。 |
| 洛斯( ) | 对于一个数值向量(x)或两个相同长度的数值向量(x 和 y)。通过局部加权多项式回归进行平滑。可以用 plot()绘制。 |
| runmed() | 对于一个数值向量(x)和一个一元数值向量,给出平滑器的宽度(k)。用运行中值平滑。可以用 plot()绘制。 |
| scatter.smooth() | 对于一个数值向量(x)或两个长度相同的数值向量(x 和 y)。绘制点和用黄土平滑的线()。 |
| 平滑( ) | 对于数值向量或时间序列(x)。使用 Tukey 开发的六个运行中值平滑器之一进行平滑。可以用 plot()绘制。 |
| 平滑散布( ) | 用于一个(x)数值向量或两个等长数值向量(x 和 y)。绘制带有彩色斑点的散点图版本。使用二维核密度估计器进行平滑。 |
| smooth.spline() | 对于一个数值向量(x)、两个等长的数值向量(x 和 y)或一个时间序列(x)。用三次平滑样条曲线进行平滑。可以用 plot()绘制。 |
| supsmu() | 对于长度相同的两个数值向量(x 和 y)。用弗里德曼的“超级平滑器”平滑。可以用 plot()绘制。 |
| tsSmooth( StructTS()) | 对于单个时间序列(x)。StructTS()适合结构化时间序列模型。目前,tsSmooth 仅使用 StructTS 类的对象运行。如果使用 plot()绘制对 tsSmooth()的调用,则根据时间序列的频率是 1 还是大于 1,分别绘制两个或三个图。这些图是拟合模型的水平、趋势和季节组成部分。 |

十五、时间序列图

在表 E-1 中,给出了用于时间序列向量和矩阵的函数。

餐桌 E-1

用于绘制列联表的函数

|

函数名

|

描述

|
| --- | --- |
| acf()和 pacf() | 用于时间序列向量或矩阵(ts 或 mts 类)或数字向量或矩阵(x)。绘制滞后时间序列的自相关或自协方差(acf)和偏自相关(pacf)。(只有单变量的情况对 pacf()起作用——多个时间序列和矩阵给出废话。)要绘制的滞后数可以由参数 lag.max 指定。由任一函数创建的对象都具有 acf 类,并且可以使用 plot()绘制。 |
| ccf() | 用于两个数字向量或两个时间序列(ts 类的对象)(x 和 y)。绘制 x 和 y 滞后之间的互相关或互协方差–向前和向后,从 0 开始。参数 lag.max 设置绘图的最大滞后。对 ccf()的调用返回 acf 类的一个对象——可以用 plot()绘制。 |
| cpgram() | 对于单个时间序列(ts 类的对象)(ts)。绘制累积周期图。 |
| layer.plot( ) | 参见附录 C 。 |
| monthplot(),monthplot( stl()),monthplot( StructTS()) | 对于单个时间序列,调用 stl()(用于按黄土拟合时间序列的季节分解),调用 StructTS()(用于按最大似然估计拟合结构化时间序列),或者调用数值向量(monthplot()假定数值向量每个周期有 12 个周期)(x)。该函数估计并绘制每个周期的图形估计量,并在整个绘图区域按周期绘制估计量。 |
| ts.plot( ) | 对于单个和多个时间序列,用逗号(…)分隔。在同一图上以相同的频率绘制多个时间序列。 |
| tsdiag() | 用于调用 arima()或 StructTS()(对象)。为拟合的时间序列模型绘制三个诊断图。这些图是模型的标准化残差、模型的自相关函数以及模型的永盒统计的 p 值。 |
| tsSmooth() | 参见附录 D 。 |

十六、杂项绘图函数

在表 F-1 中,给出了其他地方没有涉及的一些绘图的杂项函数。

餐桌 F-1

用于绘图的杂项函数

|

函数名

|

描述

|
| --- | --- |
| biplot() | 用于两个两列数字矩阵,通常行数不同(x 和 y),或者用于调用 prcomp()或 princomp( ) (x)。在同一绘图区域绘制两组数据。默认情况下,第二个图为红色,图中有箭头,右侧和顶部有红色刻度线。第一个图的刻度在左下方,点和刻度用黑色表示。第一个图中的点和第二个图中的点都被标记,第一个用黑色,第二个用红色。默认情况下,红色标签为 Var1、Var2、… Varn,其中 n 是 y 矩阵中的行数。 |
| 轮廓( ) | 参见第 4.3.5 节。 |
| 曲线( ) | 参见第 4.3.2 节。 |
| 图像( ) | 参见第 4.2.4 节。 |
| Interaction.plot() | 对于两个因子向量(可以是除 raw 之外的任何原子模式)和一个数值向量,长度都相同(x.factor、trace.factor 和 response)。一个函数(默认为 mean,由 fun 参数设置)应用于交叉因子级别内的第三个向量(通过交叉 x.factor 和 trace.factor 向量找到)。相对于 x 因子绘制结果。为 trace.factor 的每个级别绘制一条线 |
| grconvertX(),grconvertY() | 以九种不同的单位给出点的位置。单位与轴比例、绝对大小或图形设备、图形或绘图相关。无论是 x 轴还是 y 轴。 |
| 透视( ) | 对于数值矩阵(z,或者,如果 x 和 y 采用默认值,则可以是列出的第一个参数,不命名)。如果提供了 x 和 y,这两个必须是升序数字向量。z 中的列数给出 x 的长度,z 中的行数给出 y 的长度。绘制透视图。用显示的 x、y 和 z 轴创建三维感。 |
| qqline() | 对于数值向量(y)。默认情况下,绘制一条穿过 y 的 0.25 和 0.75 分位数以及标准正态分布分位数的线(在 x 轴上)。可以向由 qqnorm()或 qqplot()生成的图添加一条线,或绘制一个独立的图。 |
| qqnorm() | 对于数值向量(y)。根据正态分布的分位数绘制排序后的 y 值。 |
| qqplot() | 对于长度不一定相同的两个数值向量(x 和 y)。根据较长向量的分位数绘制较短向量。 |
| screeplot() | 对于包含名为 sdev 的元素的列表,该元素包含非负数值。绘制 sdev 值平方的条形图。对于主成分分析,结果是一个 screeplot。(prcomp()和 princomp()的输出是一个包含 sdev 元素的列表。) |
| 向日葵公园( ) | 对于一个数值向量或两个相同长度的数值向量(x 或 x 和 y)。类似于 plot()的图,除了图上具有多个观测值的地方被绘制为“向日葵”,具有与重合观测值一样多的花瓣。 |
| 术语图( ) | 对于对回归函数(如 lm()或 glm())的调用,它生成一个包含名为 terms (model)的元素的列表。对于模型中的独立变量,termplot()为每个变量绘制一个图。回归系数的值乘以变量的值,并根据变量绘制。每个变量生成一页。如果参数 partial.resid 设置为 TRUE,还会绘制每个变量的部分残差。 |
| xspline() | 对于一个数值向量(x)或两个长度相同的数值向量(x 和 y)。用线连接点。添加到现有地块。 |

第一部分:绘图概述

第二部分:ggplot2

第三部分:附录

posted @ 2024-10-01 21:04  绝不原创的飞龙  阅读(6)  评论(0编辑  收藏  举报