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


R cloud 3d 散点图和线框曲面图


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

说明

用于绘制 3D 散点图和曲面的通用函数。 "formula" 方法完成大部分实际工作。

用法

cloud(x, data, ...)
wireframe(x, data, ...)

## S3 method for class 'formula'
cloud(x,
      data,
      allow.multiple = is.null(groups) || outer,
      outer = FALSE,
      auto.key = lattice.getOption("default.args")$auto.key,
      aspect = c(1,1),
      panel.aspect = 1,
      panel = lattice.getOption("panel.cloud"),
      prepanel = NULL,
      scales = list(),
      strip = TRUE,
      groups = NULL,
      xlab,
      ylab,
      zlab,
      xlim = if (is.factor(x)) levels(x) else range(x, finite = TRUE),
      ylim = if (is.factor(y)) levels(y) else range(y, finite = TRUE),
      zlim = if (is.factor(z)) levels(z) else range(z, finite = TRUE),
      at,
      drape = FALSE,
      pretty = FALSE,
      drop.unused.levels,
      ...,
      lattice.options = NULL,
      default.scales =
      list(distance = c(1, 1, 1),
           arrows = TRUE,
           axs = axs.default),
      default.prepanel = lattice.getOption("prepanel.default.cloud"),
      colorkey,
      col.regions,
      alpha.regions,
      cuts = 70,
      subset = TRUE,
      axs.default = "r")

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

## S3 method for class 'matrix'
cloud(x, data = NULL, type = "h", 
      zlab = deparse(substitute(x)), aspect, ...,
      xlim, ylim, row.values, column.values)

## S3 method for class 'table'
cloud(x, data = NULL, groups = FALSE,
      zlab = deparse(substitute(x)),
      type = "h", ...)

## S3 method for class 'matrix'
wireframe(x, data = NULL,
          zlab = deparse(substitute(x)), aspect, ...,
          xlim, ylim, row.values, column.values)

参数

x

对其执行方法分派的对象。

对于 "formula" 方法,采用 z ~ x * y | g1 * g2 * ... 形式的公式,其中 z 是数字响应,xy 是数字值。 g1, g2, ...(如果存在)是用于调节的调节变量,并且必须是因子或带状疱疹。对于 wireframe ,计算基于以下假设:xy 值在由其唯一值定义的矩形网格上进行评估。网格点不必等距。

对于 wireframexyz 也可以是矩阵(具有相同维度),在这种情况下,它们被用来表示在 2-D 网格上参数化的 3-D 表面(例如,一个球体)。此函数无法进行调节。请参阅下面的详细信息。

允许缺失值,无论是 z 向量中的 NA 值,还是 DataFrame 中缺失的行(但请注意,在这种情况下,X 和 Y 网格将仅由可用值确定)。对于分组显示(生成多个表面),不允许缺少行,但 z 中的 NA -s 是允许的。

wireframecloud 都具有 matrix 对象的方法,在这种情况下,x 提供上述 z 向量,而其行和列分别解释为 xy 向量。这类似于 persp 中使用的形式。

data

对于 "formula" 方法,一个可选 DataFrame ,其中要评估公式中的变量(以及 groupssubset,如果有)。除非使用"formula" 方法,否则不应指定data

row.values , column.values

x 是矩阵时定义网格的可选值向量。 row.valuescolumn.values 必须分别与nrow(x)ncol(x) 具有相同的长度。默认情况下,行号和列号。

allow.multiple , outer , auto.key , prepanel , strip , groups , xlab , xlim , ylab , ylim , drop.unused.levels , lattice.options , default.scales , subset

这些参数记录在 xyplot 的帮助页面中。对于cloud.table 方法,groups 必须是一个逻辑,指示最后一个维度是否应用作分组变量而不是条件变量。仅当表的维度超过 2 个时,这才有意义。

type

cloud 中的显示类型(有关详细信息,请参阅panel.3dscatter)。对于 matrix 方法,默认为 "h"

aspect , panel.aspect

与其他高级函数不同,aspect 被视为长度为 2 的数值向量,给出了封闭立方体的 y-size/x-size 和 z-size/x-size 的相对方面。 aspect 参数在确定面板的宽高比方面的通常作用(有关详细信息,请参阅 xyplot)由 panel.aspect 扮演,但它只能是数值。

对于 matrix 方法,默认 y/x 方面是 ncol(x) / nrow(x),z/x 方面是 y/x 方面和 1 中较小的一个。

panel

用于创建显示的面板函数。有关(重要的)详细信息,请参阅panel.cloud

default.prepanel

后备预面板函数。请参阅xyplot

scales

说明尺度的列表。与其他高级函数一样(有关详细信息,请参阅xyplot),此列表可以包含名称=值形式的参数。它还可以包含具有特殊名称 xyz 的组件,这些组件可以是类似的列表,其中 axis-specific 值覆盖 scales 中指定的值。

此参数最常见的用途是设置 arrows=FALSE ,这会导致使用刻度线和标签而不是绘制箭头(默认)。两者都可以被 draw=FALSE 抑制。另一个特殊组件是 distance ,它指定轴标签与边界框的相对距离。如果指定为 scales 的组件(而不是 scales$z 等之一),则它可以是(如果不是则回收)长度为 3 的向量,分别指定 x、y 和 z 标签的距离。

xyplot 等的 scales 参数中工作的其他组件也应该在这里工作(只要它们有意义),包括刻度线位置和标签的显式规范。 (并非所有内容都已实现,但如果您发现某些应该有效但无效的内容,请随时向维护者报告错误。)

但请注意,对于这些函数scales 不能包含特定于特定面板的信息。如果您确实需要,请考虑使用 panel.cloudscales.3d 参数。

axs.default

与 2-D 显示函数不同,cloud 不会将边界框扩展到稍微超出数据范围,尽管它应该这样做。这主要是因为这是 wireframe 中的自然行为,它使用相同的代码。 axs.default 旨在为 cloud 提供不同的默认值。不过,该函数尚未实现。

zlab

指定说明 z 变量的标签,其方式类似于其他高级函数中的 xlabylab(即 “grob”、字符串、表达式或列表)。此外,如果 zlab (以及 xlabylab )是一个列表,它可以包含一个名为 rot 的组件,控制标签的旋转

zlim

z 轴的限制。与其他高级函数中的xlimylim类似

drape

逻辑上,线框是否要覆盖颜色。如果是 TRUE ,则使用面的高度来确定其颜色,其方式类似于 levelplot 中使用的着色方案。否则,背景颜色用于为面着色。如果shade = TRUE(请参阅panel.3dwire),则忽略此参数。

at , col.regions , alpha.regions

这些参数与 levelplot 中的参数类似。如果 drape=TRUEat 给出颜色变化的切点向量,而 col.regions 给出在这种情况下要使用的颜色向量。 alpha.regions 确定支持设备上的alpha-transparency。这些被传递到面板函数,如果合适的话也可以在 colorkey 中使用。 col.regionsalpha.regions 的默认值源自网格设置 "regions"

cuts

如果 at 未指定,则为 drape=TRUE 的大概切割点数量

pretty

是否应该美化自动选择的切点

colorkey

指示是否应在旁边绘制颜色键的逻辑,或说明此类键的列表。有关详细信息,请参阅levelplot

...

可以指定任意数量的其他参数,并将其传递给面板函数。特别是,参数 distanceperspectivescreenR.mat 对于确定 3-D 显示非常重要。参数 shade 对于 wireframe 调用很有用,并控制渲染表面的着色。 panel.cloud 的帮助页面详细说明了这些参数。

另外,可以指定一个名为zoom的参数,它应该是一个数字标量,被解释为投影放大的比例因子。这对于将变量名称放入绘图中非常有用。该参数实际上仅由默认的 prepanel 函数使用。

细节

这些函数在每个面板中生成三维图(只要使用默认面板函数)。方向的获取方式如下:将数据缩放到包含在 [-0.5, 0.5] 立方体中的边界框内(对于 aspect 的非默认值甚至更小)。观察方向由 screen 参数指定的一系列旋转给出,从正 Z 轴开始。观察点(摄像机)位于距原点 1/distance 的位置。如果 perspective=FALSEdistance 设置为 0(即视点位于无限远距离)。

cloud 绘制 3-D 散点图,而 wireframe 绘制 3-D 表面(通常在网格上评估)。 wireframe 可以使用 groups 参数绘制多个曲面(尽管这用途有限,因为当曲面相交时显示不正确)。将 groupscloud 一起指定会产生类似 panel.superpose 的效果(通过 panel.3dscatter )。

wireframe 可以选择将表面渲染为被光源照亮(但没有阴影)。详细信息可以在 panel.3dwire 的帮助页面中找到。请注意,虽然控制这些的参数实际上是面板函数的参数,但它们可以直接提供给cloudwireframe

对于单面板图,wireframe 还可以绘制参数化 3-D 曲面(即 f(u,v) = (x(u,v), y(u,v), z(u,v) 形式的函数)),其中 (u,v) 的值位于矩形上。此类表面的最简单示例是由纬度和经度参数化的球体。这可以通过调用 wireframe 来实现,其中公式 x 为形式 z~x*y ,其中 xyz 都是相同维度的矩阵,表示 x(u,v)、y(u,v) 和 z(u,v) 的值在离散矩形网格上评估((u,v) 的实际值不相关)。

使用此函数后,用于计算drape颜色或阴影颜色的高度不再是z值,而是(x,y,z)距原点的距离。

请注意,此函数不适用于 groupssubscriptssubset 等。在这种情况下也不支持条件变量。

用于识别边界框的哪些边是‘behind’点的算法在某些极端情况下不起作用。此外,panel.cloud 尝试自动找出箭头和轴标签的最佳位置,但有时可能会失败(特别是当视图来自‘below’ 数据时)。这可以通过 panel.cloud 中的 scpos 参数手动控制。

这些和所有其他高级网格函数有几个其他的共同参数。这些仅在 xyplot 的帮助页面中进行了大量记录,应查阅该页面以了解更详细的用法。

"trellis" 的对象。 update 方法可用于更新对象的组件,print 方法(通常默认调用)会将其绘制在适当的绘图设备上。

注意

当数据中表示的 (x, y) 坐标不代表完整的评估网格时,分组 wireframe 显示存在一个已知问题。无论是通过 groups 参数还是通过公式接口指定分组,都会出现此问题,并且当前会导致内存访问冲突。根据具体情况,这或者表现为毫无意义的情节,或者表现为崩溃。要解决此问题,每个网格点在 DataFrame 中都有一行,并在之前丢失的行中添加 NA 响应 ( z ) 就足够了。

例子

## volcano  ## 87 x 61 matrix
wireframe(volcano, shade = TRUE,
          aspect = c(61/87, 0.4),
          light.source = c(10,0,10))

g <- expand.grid(x = 1:10, y = 5:15, gr = 1:2)
g$z <- log((g$x^g$gr + g$y^2) * g$gr)
wireframe(z ~ x * y, data = g, groups = gr,
          scales = list(arrows = FALSE),
          drape = TRUE, colorkey = TRUE,
          screen = list(z = 30, x = -60))

cloud(Sepal.Length ~ Petal.Length * Petal.Width | Species, data = iris,
      screen = list(x = -90, y = 70), distance = .4, zoom = .6)

## cloud.table

cloud(prop.table(Titanic, margin = 1:3),
      type = c("p", "h"), strip = strip.custom(strip.names = TRUE),
      scales = list(arrows = FALSE, distance = 2), panel.aspect = 0.7,
      zlab = "Proportion")[, 1]

## transparent axes

par.set <-
    list(axis.line = list(col = "transparent"),
         clip = list(panel = "off"))
print(cloud(Sepal.Length ~ Petal.Length * Petal.Width, 
            data = iris, cex = .8, 
            groups = Species, 
            main = "Stereo",
            screen = list(z = 20, x = -70, y = 3),
            par.settings = par.set,
            scales = list(col = "black")),
      split = c(1,1,2,1), more = TRUE)
print(cloud(Sepal.Length ~ Petal.Length * Petal.Width,
            data = iris, cex = .8, 
            groups = Species,
            main = "Stereo",
            screen = list(z = 20, x = -70, y = 0),
            par.settings = par.set,
            scales = list(col = "black")),
      split = c(2,1,2,1))

作者

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 包的概述,以及 xyplotlevelplotpanel.cloud

有关交互,请参阅panel.identify.cloud

相关用法


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