当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R xyplot 常见的二变量网格图


R语言 xyplot 位于 lattice 包(package)。

说明

该帮助页面记录了几个常用的高级莱迪思函数。 xyplot 生成二元散点图或时间序列图,bwplot 生成 box-and-whisker 图,dotplot 生成克利夫兰点图,barchart 生成条形图,stripplot 生成一维散点图。所有这些函数以及其他高级 Lattice 函数都响应一组通用参数,这些参数以一致的方式控制条件、布局、纵横比、图例、轴注释和许多其他细节。这些参数在此帮助页面中进行了广泛的说明,并且也应该用作其他高级函数的参考。

为了控制和定制每个面板中的实际显示,相应默认面板函数的帮助页面通常会提供更多信息。特别是,这些帮助页面说明了调用相应高级函数时常用的许多参数,但这些参数是特定于它们的。

用法

xyplot(x, data, ...)
dotplot(x, data, ...)
barchart(x, data, ...)
stripplot(x, data, ...)
bwplot(x, data, ...)

## S3 method for class 'formula'
xyplot(x,
       data,
       allow.multiple = is.null(groups) || outer,
       outer = !is.null(groups),
       auto.key = lattice.getOption("default.args")$auto.key,
       aspect = "fill",
       panel = lattice.getOption("panel.xyplot"),
       prepanel = NULL,
       scales = list(),
       strip = TRUE,
       groups = NULL,
       xlab,
       xlim,
       ylab,
       ylim,
       drop.unused.levels = lattice.getOption("drop.unused.levels"),
       ...,
       lattice.options = NULL,
       default.scales,
       default.prepanel = lattice.getOption("prepanel.default.xyplot"),
       subscripts = !is.null(groups),
       subset = TRUE)

## S3 method for class 'formula'
dotplot(x,
        data,
        panel = lattice.getOption("panel.dotplot"),
        default.prepanel = lattice.getOption("prepanel.default.dotplot"),
        ...)

## S3 method for class 'formula'
barchart(x,
         data,
         panel = lattice.getOption("panel.barchart"),
         default.prepanel = lattice.getOption("prepanel.default.barchart"),
         box.ratio = 2,
         ...)

## S3 method for class 'formula'
stripplot(x,
          data,
          panel = lattice.getOption("panel.stripplot"),
          default.prepanel = lattice.getOption("prepanel.default.stripplot"),
          ...)

## S3 method for class 'formula'
bwplot(x,
       data,
       allow.multiple = is.null(groups) || outer,
       outer = FALSE,
       auto.key = lattice.getOption("default.args")$auto.key,
       aspect = "fill",
       panel = lattice.getOption("panel.bwplot"),
       prepanel = NULL,
       scales = list(),
       strip = TRUE,
       groups = NULL,
       xlab,
       xlim,
       ylab,
       ylim,
       box.ratio = 1,
       horizontal = NULL,
       drop.unused.levels = lattice.getOption("drop.unused.levels"),
       ...,
       lattice.options = NULL,
       default.scales,
       default.prepanel = lattice.getOption("prepanel.default.bwplot"),
       subscripts = !is.null(groups),
       subset = TRUE)

参数

x

lattice 中的所有高级函数都是通用的。 x 是执行方法调度的对象。

对于 "formula" 方法,x 必须是说明要在绘图中使用的主要变量(用于 per-panel 显示)和可选条件变量(定义在不同面板中绘制的子集)的公式。下面的 “Details” 部分说明了调节。

对于此处记录的函数,公式通常采用 y ~ x | g1 * g2 * ... (或等效的 y ~ x | g1 + g2 + ... )形式,表示 y (在 y 轴上)与 x (在 x 轴上)的绘图应该以变量 g1, g2, ... 为条件生成。这里xy是主变量,g1, g2, ...是条件变量。可以省略条件变量以给出 y ~ x 形式的公式,在这种情况下,绘图将由具有完整数据集的单个面板组成。该公式还可以涉及表达式,例如 sqrt()log() 等。有关公式中各项求值的规则,请参阅下面的 data 参数。

除了 xyplot 之外,此处记录的函数也可以提供 ~ x | g1 * g2 * ... 形式的公式。在这种情况下,如果命名了x,则y 默认为names(x),否则为单个级别的因子。

x 不是公式的情况通过适当的方法处理。 numeric 方法相当于公式中没有左侧且没有条件变量的调用。对于 barchartdotplot ,表和数组存在重要的方法,记录在 barchart.table 中。

条件变量g1, g2, ... 必须是因子或带状疱疹。带状疱疹提供了一种使用数值变量进行调节的方法;有关详细信息,请参阅shingle 的帮助页面。与因子一样,它们具有 "levels" 属性,用于生成条件图。如有必要,可使用 shingle 函数将数值条件变量转换为带状疱疹;然而,在许多情况下使用equal.count可能更合适。字符变量被强制为因子。

扩展公式接口:作为上述接口的有用扩展,主要变量项(LHS y 和 RHS x )可以由用“+”号分隔的多个项组成,例如 y1 + y2 ~ x | a * b 。该公式意味着用户想要同时绘制 y1 ~ x | a * by2 ~ x | a * b ,但将 y1 ~ xy2 ~ x 叠加在每个面板中。这两组将通过不同的图形参数来区分。如果 y1y2 连接起来产生一个更长的向量,这本质上就是 groups 参数(见下文)将产生的结果,而 groups 参数指示哪些行来自哪个变量。事实上,这正是使用reshape 函数在内部完成的操作。此函数不能与 groups 参数结合使用。

要将 y1 + y2 解释为总和,可以设置 allow.multiple=FALSE 或使用 I(y1+y2)

此函数的一个变体是当 outer 参数设置为 TRUE 时。在这种情况下,图不会叠加在每个面板中,而是分成不同的面板(就像添加了新的条件变量一样)。

主变量: xy 变量在 xyplot 中都应该是数字,如果不是,则尝试强制它们。但是,如果其中一个是因子,则该因子的水平将用作轴标签。在此处记录的其他四个函数中,xy 中的一个应该是数字,另一个应该是因子或木瓦。其中哪一个会发生由 horizontal 参数决定 - 如果 horizontal=TRUE ,则 y 将被强制为因子或木瓦,否则 x 。如果 x 是因子或木瓦,则 horizontal 的默认值为 FALSE,否则为 TRUE。 (horizontal=FALSE 提供的函数不是S-compatible。)

请注意,x 参数在早期版本中曾被称为 formula(当高级函数不是泛型且公式方法本质上是唯一方法时)。这不再被允许。建议在任何情况下都不要命名该参数,而是将其作为第一个(未命名)参数。

data

对于 formula 方法,包含公式中任何变量的值的 DataFrame (或更准确地说,eval 中有效的 envir 参数的任何内容,例如列表或环境),以及 groupssubset(如果适用)。如果在 data 中找不到,或者未指定 data,则在公式的环境中查找变量。对于其他方法(其中x 不是公式),data 通常被忽略,如果显式指定,通常会出现警告。

allow.multiple

指定上述扩展公式接口是否有效的逻辑标志。只要合理,默认为TRUE

outer

使用上述扩展接口控制公式发生的情况的逻辑标志(有关详细信息,请参阅 x 的条目)。默认为 FALSE ,除非显式指定 groups 或分组对于默认面板函数没有意义。

box.ratio

适用于barchartbwplot 。指定矩形宽度与inter-rectangle空间的比率。另请参阅相应默认面板函数中的box.width 参数。

horizontal

适用于 bwplotdotplotbarchartstripplot 的逻辑标志。确定 xy 中的哪一个是因子或木瓦(如果为 TRUE,则为 y,否则为 x)。如果 x 是因子或木瓦,则默认为 FALSE,否则为 TRUE。该参数用于处理这些高级函数的参数,但更重要的是,它作为参数传递给面板函数,面板函数预计会酌情使用它。

在这种情况下, scales 的潜在有用组件可能是 abbreviate = TRUE ,在这种情况下,通常会重叠的长标签将被缩写。在这种情况下,scales 还可以包含 minlength 参数,该参数将传递给 abbreviate 函数。

通用参数:以下参数对于此处记录的所有函数以及大多数其他高级 Trellis 函数都是通用的。除了覆盖此处给出的用法之外,其他地方没有记录这些内容。

panel

一旦获得由分组变量级别的每个唯一组合定义的行子集(参见“Details”),相应的xy变量(或其他变量,视情况而定,在其他高的情况下) -级函数)被传递到每个面板中绘制。实际的绘图是由 panel 参数指定的函数完成的。参数可以是函数对象或给出预定义函数名称的字符串。每个高级函数都有自己的默认面板函数,命名为“panel.”,后跟相应高级函数的名称(例如panel.xyplotpanel.barchart等)。

Trellis Graphics 的大部分函数来自于定义自定义面板函数的能力。适用于此处说明的函数的面板函数通常需要名为 xy 的参数,这些参数将由调节过程提供。它还可以有其他参数。在这种情况下,了解传递给高级莱迪思函数(例如 xyplot )但未被其识别的所有参数都会传递给面板函数是有用的。因此,在定义面板函数时允许 ... 参数通常是一种很好的做法。此类额外参数通常控制图形参数,但其他用途也很常见。有关详细信息,请参阅各个面板函数的文档。

请注意,与 S-PLUS 不同,不保证面板函数仅提供 xy 参数的数字向量;它们也可能是因子(但不是带状疱疹)。面板函数需要处理这种情况,在大多数情况下,只需将它们强制为数字即可完成。

从技术上讲,面板函数必须使用网格图形函数来编写。然而,构建新的自定义面板函数通常不需要网格知识,因为有几个预定义的面板函数可以提供帮助;例如, panel.gridpanel.loess 等。还有一些常用传统图形函数的 grid-compatible 替代品对此很有用。例如, lines 可以替换为 llines (或等效的 panel.lines )。请注意,lines 等传统图形函数无法在点阵面板函数中运行。

需要更多面板函数的一种情况是 groups 参数不是 NULL 。在这种情况下,面板函数还应该接受名为 groupssubscripts 的参数(详细信息请参见下文)。在这种情况下预定义的一个有用的面板函数是 panel.superpose ,它可以与不同的 panel.groups 函数组合来确定为每个组绘制的内容。有关以这种方式构建的交互图,请参阅“Examples”部分。其他几个面板函数也可以处理 groups 参数,包括 xyplotbarchartdotplotstripplot 的默认参数。

即使 groups 不存在,面板函数也可以将 subscripts 作为形式参数。无论哪种情况,传递给面板函数的 subscripts 参数都是原始 data 中该面板的 xy 数据的索引,然后再考虑 subset 参数的影响。请注意,groups 不受任何取子集操作的影响,因此 groups[subscripts] 给出与该面板中的数据相对应的 groups 的值。

当使用扩展公式接口时(即,当 allow.multiple 有效时),subscripts 的这种解释不成立。全面的说明会过于复杂(详细信息可以在函数latticeParseFormula的源代码中找到),但简而言之,扩展接口的工作原理是创建一个比原始 DataFrame 更长的人工分组变量,因此, subscripts需要引用原始数据之外的行。更复杂的是,人工分组变量是在 subset 产生任何影响之后创建的,在这种情况下 subscripts 可能与原始数据帧中的相应行没有关系。

还可以在面板函数内部使用名为 panel.numberpacket.number 的函数,分别表示面板顺序和数据包顺序(以及条带函数或使用 trellis.focus 等与点阵显示器交互时)。两者都提供了一个简单的整数索引,指示当前正在绘制哪个面板,但计算计数的方式有所不同。面板编号是一个简单的增量计数器,从 1 开始,每次绘制面板时都会递增。另一方面,数据包编号索引了该面板所表示的条件变量水平的组合。除非条件变量的顺序被排列和/或一个或多个条件变量内水平的绘制顺序被改变(分别使用perm.condindex.cond),否则两个索引一致,在这种情况下packet.number给出对应的索引到条件变量水平组合的 ‘natural’ 排序。

panel.xyplot 有一个名为 type 的参数,这里值得一提,因为它非常频繁使用(并且如上所述,可以直接传递给 xyplot)。如果使用 groups 变量,panel.xyplot 调用 panel.superpose ,其参数也可以直接传递给 xyplotbwplot 和朋友的面板函数应该有一个名为 horizontal 的参数,以考虑当 x 是因子或木瓦时的情况。

aspect

此参数控制面板的物理纵横比,所有面板的物理纵横比通常相同。它可以指定为比率(垂直尺寸/水平尺寸)或字符串。在后一种情况下,合法值为"fill"(默认值),它尝试使面板尽可能大以填充可用空间; "xy" ,根据 45 度倾斜规则计算纵横比(参见banking ); "iso" 用于等距比例,其中设备上的物理距离与数据比例中的距离之间的关系对于两个轴强制相同。

如果指定了 prepanel 函数并且它返回组件 dxdy ,则它们将用于银行计算。否则,将使用默认预面板函数中的值。并非所有默认的预面板函数都会产生合理的银行计算。

groups

要在 data 中计算的变量或表达式,预期充当每个面板中的分组变量,通常用于通过改变颜色和线条类型等图形参数来区分不同的组。形式上,如果指定了 groups,则 groupssubscripts 一起传递给面板函数,该函数预计将处理这些参数。对于适合分组的高级函数,默认面板函数可以处理分组。

当指定分组变量时,使用键(图例)是很常见的。请参阅 keyauto.keysimpleKey 条目了解如何绘制 key 。

auto.key

一个逻辑列表或包含用作 simpleKey 参数的组件的列表。可以使用 lattice.options 设置默认值。

auto.key = TRUE 相当于 auto.key = list() ,在这种情况下,使用一组默认参数(可能取决于相关的高级函数)调用 simpleKeykey 参数的大多数有效组件都可以通过这种方式指定,因为 simpleKey 只会将无法识别的参数添加到它生成的列表中。

auto.key 通常用于结合分组变量自动生成合适的图例。如果 auto.key = TRUE ,如果还提供了 groups 参数,则会绘制合适的图例,否则不会绘制。在列表形式中,auto.key 将修改由此生成的默认图例。例如,auto.key=list(columns = 2) 将创建一个分为两列的图例(columns 记录在 key 的条目中)。

更准确地说,如果 auto.key 不是 FALSEgroups 不为空,并且调用中没有指定 keylegend 参数,则使用 simpleKeylevels(groups) 创建 key 作为第一个 (text) 参数。 (注意:这可能不适用于所有高级函数,但它确实适用于使用默认面板函数进行分组的函数)。如果 auto.key 作为列表提供并包含 text 组件,则该组件将用作键中的文本标签,并且即使未指定 groups,也会绘制键。

请注意,simpleKey 使用默认设置(请参阅 trellis.par.get )来确定键中的图形参数,因此只有在绘图中也使用相同的设置时,生成的图例才有意义。 par.settings 参数可能与 simpleTheme 结合使用,可用于为此目的临时修改默认设置。

直接使用 key (甚至 simpleKey )的一个缺点是, key 中使用的图形参数在创建 "trellis" 对象时绝对确定。因此,如果使用不同的设置重新创建绘图后,plot,原始参数设置将用于键,即使新设置用于实际显示。但是,对于 auto.key , key 实际上是在绘图时创建的,因此设置将匹配。

prepanel

一个函数,它采用与 panel 函数相同的参数并返回一个列表,可能包含名为 xlimylimdxdy 的组件(不太常见的是 xatyat )。用户提供的预面板函数的返回值不需要包含所有这些组件;如果缺少某些内容,它们将被component-wise 默认值替换。

xlimylim 组件类似于高级 xlimylim 参数(即,它们通常是定义范围的长度为 2 的数值向量,或表示因子级别的字符向量)。如果在高级调用中未显式指定 xlimylim 参数(可能作为 scales 中的组件),则保证面板的实际限制包括 prepanel 函数返回的限制。如果 scalesrelation 组件是 "same" ,则会在全局范围内发生这种情况,否则在 per-panel 基础上发生。

dxdy 组件用于在 aspect 指定为 "xy" 的情况下进行银行计算。有关详细信息,请参阅banking 的文档。

如果 xlimylim 是字符向量(当相应变量是因子时适用),这隐式指示比例应包括前 n 整数。其中 nxlimylim 的长度,视情况而定。字符向量的元素用作这些 n 整数的默认标签。因此,为了使该信息在面板之间保持一致,xlimylim 值应代表相应因子的所有级别,即使某些级别未在该特定面板中使用。

在这种情况下,prepanel 函数可能会返回附加组件 xatyat,该组件应该是 1:n 的子集,指示哪些 n 值(级别)实际表示在控制板。当使用 scales 中的 relation="free"relation="sliced" 计算限制时,这非常有用。

xy (等)变量是零长度向量时,预面板函数负责提供有意义的返回值。如果没有其他合适的值,则应为 xlimylim 组件返回 NA 值。

strip

逻辑标志或函数。如果是 FALSE ,则不会绘制条带。否则,将使用 strip 函数绘制条带,该函数默认为 strip.default 。请参阅 strip.default 的文档以查看 strip 函数可用的参数。此说明也适用于 strip.left 参数(请参阅下面的 ...),该参数可用于在每个面板的左侧绘制条带(对于宽短面板很有用,例如在时间序列图中)。

xlab

为 x 轴提供标签的字符或表达式(或 "grob" )。通常默认为定义绘图的公式中 x 的表达式。可以指定为 NULL 以完全省略标签。可以进行更精细的控制,如 main 条目中所述,并进行修改:如果从列表中省略 label 组件,则将其替换为默认的 xlab

ylab

为 y 轴提供标签的字符或表达式(或 "grob" )。通常默认为定义绘图的公式中 y 的表达式。可以进行更精细的控制,请参阅 mainxlab 的条目。

scales

通常是确定如何绘制 x 轴和 y 轴(刻度线和标签)的列表。该列表包含name=value 形式的参数,并且还可以包含相同形式的另外两个列表,称为xy(如下所述)。 xy 的组件仅影响各自的轴,而 scales 中的组件影响两者。当在两个列表中指定参数时,将使用xy 中的值。请注意,某些高级函数具有特定于特定轴的默认值(例如,bwplot 仅针对分类轴有 alternating=FALSE);这些只能被 scales 相应组件中的条目覆盖。

作为特殊例外,scales(或其xy 组件)也可以是字符串,在这种情况下,它被解释为relation 组件。

可能的组件有:

relation

确定如何计算每个面板的轴限制的字符串。可能的值为 "same" (默认)、"free""sliced" 。对于 relation="same" ,相同的限制(通常大到足以包含所有数据)用于所有面板。对于 relation="free" ,每个面板的限制仅由该面板中的点确定。 relation="sliced" 的行为类似,只是刻度的长度(最大 - 最小)被限制在面板之间保持相同。

确定适合每个面板的轴限制可以通过 prepanel 函数控制,该函数可以由 xlimylimscales$limits 覆盖(除非 relation="sliced" ,在这种情况下明确指定限制被忽略并带有警告)。当 relation"free" 时,xlimylim 可以是一个列表,在这种情况下,它被视为其组件是从每个面板的预面板计算中获得的极限值(如有必要,则在复制后) 。

tick.number

一个整数,给出建议的刻度之间的间隔数。对于因子、木瓦或字符向量,这会被忽略,因为在这些情况下,不存在省略某些标签的自然规则。但请参阅xlim

draw

逻辑标志,默认为 TRUE ,决定是否绘制轴(即刻度线和标签)。

alternating

通常是一个逻辑标志,指定轴标签是否应从面板组的一侧交替到另一侧。为了更精细的控制,alternating 也可以是由以下数字组成的向量(复制到与每页的行数或列数一样长)

  • 0:不绘制刻度标签

  • 1:底部/左侧

  • 2:顶部/右侧

  • 3:两者都有。

alternating 仅在 relation="same" 时适用。默认值为 TRUE ,或等效的 c(1, 2)

limits

xlimylim 相同。

at

刻度线沿轴的位置(在本机坐标中),或与说明每个面板的刻度位置的面板数量一样长的列表。

labels

at 一起使用的标签(字符或表达式)向量。也可以是类似 at 的列表。

cex

用于控制轴标签字符大小的数字乘数。可以是长度为2的向量,分别控制左/下和右/上标签。

font , fontface , fontfamily

指定用于轴标签的字体。

lineheight

指定行高参数(行高为文本大小的倍数);与多行标签相关。 (目前 cloud 会忽略这一点。)

tck

通常是控制刻度线长度的数字标量。也可以是长度为2的向量,分别控制左/下和右/上刻度线的长度。

col

刻度线和标签的颜色。

rot

轴标签旋转的角度(以度为单位)。可以是长度为 2 的向量,分别控制左/下和右/上轴。

abbreviate

逻辑标志,指示是否使用abbreviate函数缩写标签。对于长标签(例如,以因子为单位)非常有用,尤其是在 x 轴上。

minlength

如果 abbreviate=TRUE 则参数传递给 abbreviate

log

控制相应的变量( xy )在传递给面板函数之前是否进行对数转换。默认为 FALSE ,在这种情况下数据不会被转换。其他可能的值是作为对数基数的任何数字、TRUE(相当于 10)和"e"(用于自然对数)。作为副作用,相应的轴被不同地标记。请注意,这实际上是数据的转换,而不是轴的转换。除了轴标记之外,使用此函数与转换公式中的数据没有什么不同;例如, scales=list(x = list(log = 2)) 相当于 y ~ log2(x)

有关如何控制轴标签的详细信息,请参阅下面的 equispaced.log 条目。

equispaced.log

一个逻辑标志,指示使用“对数刻度”时刻度线位置是否应等距。默认为 TRUE

刻度线始终以原始(未转换)比例进行标记,但这使得刻度线位置的选择变得非常重要。如果 equispaced.logFALSE ,则所做的选择类似于传统图形中对数刻度的注释方式。如果 TRUE ,则刻度线位置选择为变换比例中的 ‘pretty’ 等距值,并以 "base^loc" 形式标记,其中 base 是对数变换的基数,loc 是变换后的尺度。

另请参阅latticeExtra 包中的xscale.components.logpower

format

用于 POSIXct 变量的 format。有关有效值的说明,请参阅strptime

axs

字符串 "r" (默认)或 "i" 。在后一种情况下,轴限制被计算为精确的数据范围,而不是在任一侧填充。 (可能并不总是按预期工作。)

请注意,scales 的大部分函数是由splom 中的pscales 完成的。

subscripts

一个逻辑标志,指定是否应将名为 subscripts 的向量传递给面板函数。默认为 FALSE ,除非指定 groups ,或者面板函数接受名为 subscripts 的参数。如果即使这些条件不成立,但仍希望传递下标,则此参数很有用;一个典型的例子是,当人们希望在绘制格子图后对其进行扩充时,例如使用 panel.identify

subset

计算结果为逻辑或整数索引向量的表达式。与 groups 一样,它在 data 中进行评估。仅 data 的结果行用于绘图。如果 subscriptsTRUE ,则提供给面板函数的下标将是引用子集之前的 data 行的索引。数据帧中子集化后未使用的因子级别是否会被删除取决于drop.unused.levels 参数。

xlim

通常,长度为 2 的数值向量(或 DateTime 对象)给出 x 轴的左右限制,或字符向量,预计表示 x 的级别。后一种形式被解释为包含 c(1, length(xlim)) 的范围,其中字符向量确定刻度位置 1:length(xlim) 处的标签。

xlim 也可以是一个列表,其中包含与面板数量一样多的组件(如有必要,可回收),每个组件如上所述。仅当 scales$x$relation"free" 时,这才有意义,在这种情况下,这些值将被视为前面板计算返回的相应限制分量。

ylim

xlim 类似,应用于 y 轴。

drop.unused.levels

一个逻辑标志,指示是否将删除未使用的因子级别,通常在执行子集操作或创建 interaction 时相关。未使用的级别通常会被删除,但有时适当地抑制删除以保留有用的布局。为了更好地控制,该参数也可以是包含组件 conddata 的列表,这两个组件都是逻辑的,分别指示条件变量和主变量的期望行为。默认值由 lattice.getOption("drop.unused.levels") 给出,两个组件的初始值均设置为 TRUE。请注意,此参数不控制 groups 参数级别的删除。

default.scales

给出特定高级函数的 scales 默认值的列表。 end-user 很少对此感兴趣,但在定义充当高级莱迪思函数之一的包装器的其他函数时可能会有所帮助。

default.prepanel

函数或字符串,给出函数名称,当未指定 prepanel 参数或未返回所有必需组件时,该函数用作 (component-wise) 后备预面板函数。此参数的主要目的是通过使用 lattice.options 来覆盖默认值。

lattice.options

可以提供给 lattice.options 的列表。这些选项会在调用期间临时应用,之后设置将恢复为之前的状态。这些选项与对象一起保留并在绘图期间重复使用。这使用户能够将选项设置附加到网格对象本身,而不是全局更改设置。另请参阅下面说明的 par.settings 参数,以了解图形设置的类似处理。

...

更多参数,通常不会由此处记录的高级函数直接处理,而是传递给其他函数。这些参数可以大致分为两类:那些以类似方式影响所有高级莱迪思函数的参数,以及那些针对正在使用的特定面板函数的参数。

第一组参数由名为 trellis.skeleton 的通用未导出函数处理。这些参数影响所有高级函数,但仅在此处记录(除了覆盖此处说明的行为)。在高级调用中指定的所有其他参数,特别是那些既没有在此处说明也没有在相关高级函数的帮助页面中说明的参数,将原封不动地传递给所使用的面板函数。按照惯例,用于任何高级函数的默认面板函数被命名为“panel.”,后跟高级函数的名称;例如bwplot的默认面板函数是panel.bwplot。实际上,这意味着除了所使用的高级函数的帮助页面之外,用户还应该查阅相应面板函数的帮助页面以获取在高级调用中可能指定的参数。

第一组公共参数的效果如下:

as.table

控制面板显示顺序的逻辑标志:如果FALSE(默认值),则面板从左到右、从下到上绘制(如图所示);如果 TRUE ,从左到右,从上到下(如表中所示)。

between

包含组件 xy(默认情况下两者通常均为 0)、指定面板之间空间的数字向量(单位是字符高度)的列表。重复 xy 以考虑页面中的所有面板,并忽略任何额外组件。结果用于多页显示中的所有页面。换句话说,不可能对不同的页面使用不同的between值。

key

定义要在绘图上绘制的图例的列表。该列表用作 draw.key 函数的参数,该函数生成最终由 "trellis" 对象的 print 方法绘制的 "grob"(网格对象)。图例的结构受到下述方式的限制。

虽然这样的列表可以并且通常是显式创建的,但也可以使用 simpleKey 函数生成这样的列表;后者更方便但灵活性较差。对于使用图例的最常见情况(即与分组变量结合使用),auto.key 参数甚至更加方便。要使用多个图例,或者要具有不受 key 强加的结构约束的任意图例,请使用 legend 参数。

按键的位置可以通过两种可能的方式之一进行控制。如果存在名为 space 的组件,则键位于绘图区域之外的四个边之一,由 space 的值确定,该值可以是以下之一: "top""bottom""left""right" 。或者,可以通过指定组件 xycorner 将键定位在绘图区域内。 xy 确定 corner 给出的键角的位置,通常是以下之一: c(0,0)c(1,0)c(1,1)c(0,1) ,它们表示键的角点单位平方。小数值也是允许的,在这种情况下,xy 确定键内部(或单位间隔之外的值的外部)任意点的位置。

xy 应为 0 到 1 之间的数字,给出相对于 “display area” 的坐标。根据 "legend.bbox" 选项的值(请参阅 lattice.getOption ),这可以是完整的图形区域 ( "full" ),也可以只是边接口板和条带的区域 ( "panel" )。

键本质上由许多列组成,可能分为块,每个块包含一些行。 key 的内容由名为 "rectangles""lines""points""text" 的组件确定(可能重复)。其中每一个都必须列出并具有控制其外观的相关图形参数(见下文)。 key 列表本身可以包含图形参数,如果从其他组件中省略相关图形组件,则将使用这些参数。

每个此类列("text" 除外)的长度(行数)被视为图形组件的最大长度,包括外部指定的组件(有关此内容的详细信息,请参阅下面的 rep 条目)。 "text" 组件必须有一个字符或表达式向量作为其第一个组件,才能用作标签。该向量的长度决定了行数。

可以包含在 key 以及名为 "text""lines""points""rectangles" (视情况而定)的组件中的图形组件包括:

  • cex=1(文本、线条、点)

  • col="black"(文本、矩形、线条、点)

  • alpha=1(文本、矩形、线条、点)

  • fill="transparent"(线、点)

  • lty=1(行)

  • lwd=1(线、点)

  • font=1(文本、点)

  • fontface(文本、点)

  • fontfamily(文本、点)

  • pch=8(线、点)

  • adj=0(文本)

  • type="l"(行)

  • size=5(矩形、直线)

  • height=1(矩形)

  • lineheight=1(文本)

  • angle=0(矩形,但被忽略)

  • density=-1(矩形,但被忽略)

另外,border组件可以包含在"rect"组件内部,用于控制矩形的边框颜色;当在顶层指定时,border 控制整个键的边框(见下文)。

angledensity 未实现。 size 确定矩形的列宽和字符宽度中的行宽。 type 与行相关; "l"表示线,"p"表示点,"b""o"同时表示两者。 height 给出矩形高度作为默认值的一部分。

key 的其他可能组件有:

reverse.rows

逻辑标志,默认为 FALSE 。如果是 TRUE ,则复制后所有组件都会反转(具体取决于 rep 的值)。这在某些情况下很有用,例如,将 barchartstack = TRUE 分组,并在垂直轴上分类变量,图中的条形通常从下到上排序,但相应的图例将具有从上到下的级别,除非 reverse.rows = TRUE 。请注意,在这种情况下,除非所有列具有相同的数字或行,否则它们将不再对齐。

between

给出每列周围空间量(字符宽度)的数值向量(在两侧均等分割)。

title

给出键标题的字符串或表达式。

rep

逻辑标志,默认为 TRUE 。默认情况下,假定键中的所有列("text" 除外)都具有相同的行数,并且所有组件都被复制为与最长的一样长。这可以通过指定 rep=FALSE 来抑制,在这种情况下,每列的长度将由该列的组件单独确定。

cex.title

标题的缩放系数。

lines.title

标题在行中占据的垂直空间量(其自身的倍数)。默认为 2。

padding.text

包含文本的每行上方和下方使用的空间量(填充),为默认值的倍数,当前为 0.2 * "lines" 。此填充是在包含文本的任何行的正常高度之外添加的,这是包含所有文本条目所需的最小高度。

background

图例的背景颜色。默认为全局背景颜色。

alpha.background

背景的 alpha 透明度值介于 0 和 1 之间。

border

边框颜色或逻辑标志。在后一种情况下,如果 borderTRUE ,则边框颜色为黑色;如果 FALSE (默认),则不绘制边框。

transparent=FALSE

逻辑标志,图例是否应该有透明背景。

just

长度为 1 或 2 的字符或数字向量,给出图例放置的水平和垂直对齐方式。有关更精确的详细信息,请参阅grid.layout

columns

图例要分为column-blocks(并排绘制)的数量。

between.columns

除了 between 之外,列块之间的空间。

divide

typelines 中的 "b""o" 时,每行划分的点符号的数量。

legend

如果想要放置多个键,则 legend 参数可能很有用。它还允许使用任意 "grob" (网格对象)作为图例。

如果使用,legend 必须是一个列表,具有任意数量的组件。每个组件必须命名为 "left""right""top""bottom""inside" 之一。名称 "inside" 可以重复,但其他名称不能重复。此名称将用于确定该组件的位置,类似于 keyspace 组件。如果指定 key (或 colorkey 对于 levelplotwireframe ),则它们的 space 组件不得与 legend 的任何组件的名称冲突。

legend 的每个组件都必须有一个名为 fun 的组件。这可以是 "grob" ,也可以是调用时生成 "grob" 的函数(或函数的名称)。如果此函数需要任何参数,则必须将它们作为另一个名为 args 的组件中的列表提供。对于名为 "inside" 的组件,可以有名为 xycorner 的附加组件,其工作方式与 key 相同。

page

绘制每一页后调用的一个参数(页码)的函数。该函数必须是‘grid-compliant’,并且以整个显示区域作为默认视口来调用。

xlab.topylab.right

x 轴的标签位于顶部,y 轴的标签位于右侧。与 xlabylab 类似,但不太常用。

main

通常是说明要放置在每个页面顶部的主标题的字符串或表达式。默认为 NULL

main (以及 xlabylabsub )通常是用作标签的字符串或表达式,但也可以是控制更多细节的列表。表达式被视为 LaTeX-like 标记的规范,如 plotmath 中所述。标签可以是向量,在这种情况下,组件将水平间隔(或 ylab 垂直间隔)。此函数可用于提供列或行标签,而不是单个轴标签。

main(等)是列表时,实际标签应指定为label组件(如果是第一个组件,则可以未命名)。标签可能会丢失,在这种情况下,将使用默认值(xlabylab 通常有默认值,但 mainsub 没有)。更多命名参数将传递给 textGrob ;这可以包括控制定位的参数,如justrot,以及图形参数,如colfont(完整列表请参见gpar)。

mainsubxlabylabxlab.topylab.right 也可以是任意 "grob" (网格图形对象)。

sub

要放置在每页底部的字幕的字符串或表达式(或列表或 "grob" )。请参阅 main 条目以获取更精细的控制选项。

par.strip.text

用于控制条带文本外观的参数列表。值得注意的组件是 colcexfontlines 。前三个控制图形参数,而最后一个是改变条带高度的方法。例如,如果条带标签(例如,从因子水平派生)是双倍高度(即包含"\n" -s)或者默认高度看起来太小或太大,这可能很有用。

此外,lineheight 组件可以控制多行之间的间距。通过指定 abbreviate = TRUE 显示时可以缩写标签,在这种情况下,可以指定组件 minlengthdot(传递给 abbreviate 函数)来控制如何完成此操作的详细信息。

layout

一般来说,Lattice 中的条件图由排列成矩形阵列的多个面板组成,可能跨越多个页面。 layout 决定了这种安排。

layout 是长度为 2 或 3 的数值向量,给出多面板显示中的列数、行数和页数(可选)。默认情况下,列数是第一个条件变量的级别数,行数是第二个条件变量的级别数。如果只有一个条件变量,则默认布局向量为 c(0,n) ,其中 n 是给定向量的级别数。任何时候布局向量中的第一个值为 0 时,第二个值将用作每页所需的面板数量,并据此计算实际布局,同时考虑面板的长宽比和设备尺寸(通过 par("din") )。如果为行数或列数(但不是两者)指定NA,则将根据面板数填写该维度。

页数默认设置为绘制所有面板所需的页数,因此很少需要指定。但是,在某些情况下,默认计算可能不正确,在这种情况下需要明确指定页数。

skip

逻辑向量(默认 FALSE ),复制到与面板数量一样长(跨越所有页面)。对于 TRUE 的元素,跳过对应的面板位置;即,该位置没有绘制任何内容。原本应该绘制在那里的面板现在绘制在下一个可用面板位置,并且所有后续面板的位置都相应地向上移动。这对于以信息丰富的方式排列绘图可能很有用。

strip.left

strip.left 可用于在每个面板的左侧绘制条带,这对于宽短面板非常有用,如时间序列(或类似)图中。有关详细用法,请参阅 strip 条目。

xlab.defaultylab.default

未指定时 xlabylab 的后备默认值。如果是 NULL ,则默认值是从网格公式中解析的。这对于 end-user 很少有用,但在开发新的莱迪思函数时很有帮助。

xscale.componentsyscale.components

分别确定 x 轴和 y 轴的轴注释的函数。请参阅xscale.components.default(这些参数的默认值)的文档以了解更多信息。

axis

负责绘制轴注释的函数。请参阅axis.default(此参数的默认值)的文档以了解更多信息。

perm.cond

一个整数向量,1:n 的排列,其中 n 是条件变量的数量。默认情况下,绘制面板的顺序取决于公式中指定的条件变量的顺序。 perm.cond可以修改这个顺序。如果将网格显示视为 n 维数组,则在打印期间,将使用 perm.cond 排列其维度,就像 perm 参数在 aperm 中所做的那样。

index.cond

perm.cond 排列多维面板数组的维度,而 index.cond 可用于对该数组的边距进行子集化(或重新排序)。 index.cond 可以是列表或函数,每种情况下的行为如下所述。

每个调节变量内的面板显示顺序取决于其级别的顺序。 index.cond 可用于选择这些级别的 ‘subset’(在 R 意义上),然后将其用作该变量的显示顺序。如果 index.cond 是一个列表,则它必须与条件变量的数量一样长,并且第 i 分量必须是 levels(g_i) 的有效索引向量,其中 g_ii图中的第 -th 条件变量(请注意,这些级别可能不包含原始变量的所有级别,具体取决于 subsetdrop.unused.levels 参数的影响)。特别是,该索引可能会重复级别,或者完全删除一些级别。该索引的结果决定了该条件变量中面板的顺序。要保持特定变量的顺序不变,必须将相应的组件设置为 TRUE

请注意, index.cond 的组件按照原始调用中条件变量的顺序进行解释,并且不受 perm.cond 的影响。

另一种可能性是将 index.cond 指定为函数。在这种情况下,每个面板都会调用此函数一次,可能会使用传递给该面板的面板函数的所有参数。 (更具体地说,如果此函数具有 ... 参数,则传递所有面板参数,否则,仅传递匹配的命名参数。)如果只有一个条件变量,则对该变量的级别进行排序,以便这些值按升序排列。对于多个条件变量,每个变量的顺序是通过首先取所有其他条件变量的平均值来确定的。

虽然它们可以直接在高级函数调用中提供,但更典型的是使用 perm.condindex.cond 来更新现有的 "trellis" 对象,从而允许它以不同的排列方式显示,而无需重新计算进入每个面板的数据子集。在 update.trellis 方法中,两者都可以设置为 NULL ,这会将它们恢复为默认值。

par.settings

可以提供给 trellis.par.set 的列表。绘制生成的对象时,这些选项会在绘制期间临时应用,之后设置将恢复为之前的状态。这使得用户能够将一些显示设置附加到网格对象本身,而不是全局更改设置。另请参阅上面说明的 lattice.options 参数,以了解对非图形选项的类似处理。

plot.args

包含 plot.trellis 的可能参数的列表,绘制对象时将由 plotprint 方法使用,除非显式覆盖。这使得用户能够将此类参数附加到网格对象本身。不执行部分匹配。

细节

此处记录的高级函数以及其他高级莱迪思函数都是通用的,formula 方法通常执行最重要的工作。生成的图的结构主要由公式控制(在非公式方法的情况下隐式控制)。对于条件变量 g1, g2, ... 级别的每个唯一组合,都会生成一个单独的 “packet”,其中由该组合定义的数据子集的点 (x,y) 组成。显示器可以被认为是一个三维面板阵列,每页由一个二维矩阵组成。该数组的维度由layout 参数确定。如果没有条件变量,则生成的图由单个数据包组成。每个数据包通常对应一个面板,但这并不是绝对必要的(请参阅上面index.cond 的条目)。

lattice默认使用的坐标系就像一个图表,原点位于左下角,轴向右和顶部递增。特别是,默认情况下,面板是从左下角开始,向右然后向上绘制的,除非 as.table = TRUE ,在这种情况下,面板是从左上角开始,向右然后向下绘制的。可以通过将默认值更改为 as.table=TRUE 来设置 table-like 排列的全局首选项;这可以通过设置 lattice.options(default.args = list(as.table = TRUE)) 来完成。可以通过这种方式为以下参数设置默认值: as.table , aspect , between , page , main , sub , par.strip.text , layout , skipstrip 。请注意,这些全局默认值有时会被各个函数覆盖。

面板的顺序取决于指定条件变量的顺序, g1 变化最快,其次是 g2 ,依此类推。在条件变量中,顺序取决于级别的顺序(对于因子来说通常按字母顺序排列)。这两个顺序都可以使用 index.condperm.cond 参数进行修改,也可以使用 update(和其他相关)方法。

此处记录的高级函数以及其他高级莱迪思函数返回类 "trellis" 的对象。 update 方法可用于随后更新对象的组件,而 print 方法(通常默认调用)会将其绘制在适当的绘图设备上。

注意

此处记录的大多数参数也适用于 lattice 包中的其他高级函数。除非相关,否则不会在其他地方详细说明这些内容,并且应将其视为此类论点的规范文档。

传递给这些函数但未被它们识别的任何参数都将传递给面板函数。大多数预定义的面板函数都具有自定义其输出的参数。这些参数仅在这些面板函数的帮助页面中进行说明,但通常可以作为高级绘图的参数提供。

例子

require(stats)

## Tonga Trench Earthquakes

Depth <- equal.count(quakes$depth, number=8, overlap=.1)
xyplot(lat ~ long | Depth, data = quakes)
update(trellis.last.object(),
       strip = strip.custom(strip.names = TRUE, strip.levels = TRUE),
       par.strip.text = list(cex = 0.75),
       aspect = "iso")

## Extended formula interface 

xyplot(Sepal.Length + Sepal.Width ~ Petal.Length + Petal.Width | Species,
       data = iris, scales = "free", layout = c(2, 2),
       auto.key = list(x = .75, y = .75, corner = c(0.5, 0.5)))

## user defined panel functions

states <- data.frame(state.x77,
                     state.name = dimnames(state.x77)[[1]],
                     state.region = state.region)
xyplot(Murder ~ Population | state.region, data = states,
       snames = states$state.name,
       panel = function(x, y, subscripts, snames) {
           panel.text(x = x, y = y, labels = snames[subscripts], cex = 1,
                      fontfamily = "HersheySans")
       })

## Stacked bar chart

barchart(yield ~ variety | site, data = barley,
         groups = year, layout = c(1,6), stack = TRUE,
         auto.key = list(space = "right"),
         ylab = "Barley Yield (bushels/acre)",
         scales = list(x = list(rot = 45)))

bwplot(voice.part ~ height, data = singer, xlab = "Height (inches)")

dotplot(variety ~ yield | year * site, data=barley)

## Grouped dot plot showing anomaly at Morris

dotplot(variety ~ yield | site, data = barley, groups = year,
        key = simpleKey(levels(barley$year), space = "right"),
        xlab = "Barley Yield (bushels/acre) ",
        aspect=0.5, layout = c(1,6), ylab=NULL)

stripplot(voice.part ~ jitter(height), data = singer, aspect = 1,
          jitter.data = TRUE, xlab = "Height (inches)")

## Interaction Plot

xyplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
       type = "a",
       auto.key =
       list(space = "right", points = FALSE, lines = TRUE))

## longer version with no x-ticks

## Not run: 
bwplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
       panel = "panel.superpose",
       panel.groups = "panel.linejoin",
       xlab = "treatment",
       key = list(lines = Rows(trellis.par.get("superpose.line"),
                  c(1:7, 1)),
                  text = list(lab = as.character(unique(OrchardSprays$rowpos))),
                  columns = 4, title = "Row position"))

## End(Not run)

作者

Deepayan Sarkar Deepayan.Sarkar@R-project.org

参考

Sarkar, Deepayan (2008) Lattice: Multivariate Data Visualization with R, Springer. http://lmdvr.r-forge.r-project.org/

也可以看看

Lattice 包的概述,以及 barchart.table , print.trellis , shingle , banking , reshape , panel.xyplot , panel.bwplot , panel.barchart , panel.dotplot , panel.stripplot , panel.superpose , panel.loess , panel.average , strip.default , simpleKey trellis.par.set

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Common Bivariate Trellis Plots。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。