當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。