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


R persp 透視圖


R語言 persp 位於 graphics 包(package)。

說明

此函數在 x-y 平麵上繪製曲麵的透視圖。 persp 是一個通用函數。

用法

persp(x, ...)

## Default S3 method:
persp(x = seq(0, 1, length.out = nrow(z)),
      y = seq(0, 1, length.out = ncol(z)),
      z, xlim = range(x), ylim = range(y),
      zlim = range(z, na.rm = TRUE),
      xlab = NULL, ylab = NULL, zlab = NULL,
      main = NULL, sub = NULL,
      theta = 0, phi = 15, r = sqrt(3), d = 1,
      scale = TRUE, expand = 1,
      col = "white", border = NULL, ltheta = -135, lphi = 0,
      shade = NA, box = TRUE, axes = TRUE, nticks = 5,
      ticktype = "simple", ...)

參數

x , y

測量 z 中的值的網格線位置。這些必須按升序排列。默認情況下,使用 0 到 1 之間的等距值。如果 xlist ,則其組件 x$xx$y 分別用於 xy

z

包含要繪製的值的矩陣(允許 NA )。請注意,為方便起見,可以使用x 代替z

xlim , ylim , zlim

x、y 和z-limits。應選擇這些以覆蓋表麵值的範圍:請參閱“詳細信息”。

xlab , ylab , zlab

軸的標題。注意:這些必須是字符串;不接受表達式。數字將被強製轉換為字符串。

main , sub

主標題和副標題,如 title

theta , phi

定義觀察方向的角度。 theta 給出方位角方向,phi 給出餘緯度。

r

視點距繪圖框中心的距離。

d

可用於改變透視變換強度的值。 d 的值大於 1 將減弱透視效果,而值小於 1 則會誇大透視效果。

scale

在查看之前,定義表麵的點的 x、y 和 z 坐標將轉換為區間 [0,1]。如果scaleTRUE,則x、y 和z 坐標分別進行變換。如果scaleFALSE,則縮放坐標以保留縱橫比。這對於渲染 DEM 信息等內容非常有用。

expand

應用於z 坐標的擴展因子。通常與0 < expand < 1一起使用,以在z方向縮小繪圖框。

col

表麵刻麵的顏色。透明顏色將被忽略。這將被回收到 方麵。

border

圍繞表麵刻麵繪製的線條的顏色。默認值 NULL 對應於 par("fg")NA 值將禁用邊框的繪製:當表麵有陰影時,這有時很有用。

ltheta , lphi

如果為 lthetalphi 指定有限值,則表麵會被著色,就像從方位角 ltheta 和餘緯度 lphi 指定的方向照亮一樣。

shade

表麵小平麵處的陰影計算為 ((1+d)/2)^shade ,其中 d 是垂直於小平麵的單位向量與光源方向上的單位向量的點積。 shade 的值接近 1 會產生類似於點光源模型的陰影,而接近 0 的值不會產生陰影。 0.5 到 0.75 範圍內的值提供了日光照明的近似值。

box

是否應該顯示表麵的邊界框。默認為 TRUE

axes

應在框中添加刻度線和標簽。默認為 TRUE 。如果boxFALSE,則不會繪製刻度線或標簽。

ticktype

字符:"simple"僅繪製一個與軸平行的箭頭來指示增加的方向; "detailed" 根據 2D 圖繪製正常刻度。

nticks

在軸上繪製的刻度線的(近似)數量。如果 ticktype"simple" 則無效。

...

額外的graphical parameters(參見par)。

細節

通過首先使用提供的或根據數據範圍計算的限製將 (x,y,z) 坐標轉換為區間 [0,1] 來生成繪圖。然後通過從 thetaphi 定義的方向查看原點來查看表麵。如果thetaphi 均為零,則觀察方向直接沿負 y 軸向下。更改 theta 將改變方位角並更改 phi 餘緯度。

繪圖完成後會調用一個名為"persp"(請參閱setHook)的鉤子,該鉤子在測試代碼中用於注釋繪圖頁麵。調用鉤子函數時不帶參數。

請注意,perspz 矩陣解釋為 f(x[i], y[j]) 值表,因此 x 軸對應於行號,y 軸對應於列號,第 1 列位於底部,因此采用標準旋轉角度,矩陣的左上角顯示在左側,最靠近用戶。

ticktype = "detailed" 的軸標簽和注釋的大小和字體分別由圖形參數"cex.lab" /"font.lab""cex.axis" /"font.axis" 控製。

邊界框是用背向觀察者的麵的邊(因此位於框的背麵)繪製的,並用實線和虛線繪製,其他邊位於表麵的頂部。此操作(以及軸的繪製)假設選擇了軸限製,以便表麵位於框內,如果情況並非如此,該函數將發出警告。

persp() 返回觀看變換矩陣,例如 VT ,一個 矩陣,適合使用齊次 4D 坐標 將 3D 坐標 投影到 2D 平麵。它可用於通過 lines()points() 使用函數 trans3d() 在 3D 繪圖上疊加其他圖形元素。

例子

require(grDevices) # for trans3d
## More examples in  demo(persp) !!
##                   -----------

# (1) The Obligatory Mathematical surface.
#     Rotated sinc function.

x <- seq(-10, 10, length.out = 30)
y <- x
f <- function(x, y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r }
z <- outer(x, y, f)
op <- par(bg = "white")
persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "lightblue")
persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "lightblue",
      ltheta = 120, shade = 0.75, ticktype = "detailed",
      xlab = "X", ylab = "Y", zlab = "Sinc( r )", cex.axis = 0.8
) -> res
round(res, 3)

# (2) Add to existing persp plot - using trans3d() :

xE <- c(-10,10); xy <- expand.grid(xE, xE)
points(trans3d(xy[,1], xy[,2], z = 6,          pmat = res), col = 2, pch = 16)
lines (trans3d(x,      y = 10, z = 6 + sin(x), pmat = res), col = 3)

phi <- seq(0, 2*pi, length.out = 201)
r1 <- 7.725 # radius of 2nd maximum
xr <- r1 * cos(phi)
yr <- r1 * sin(phi)
lines(trans3d(xr,yr, f(xr,yr), res), col = "pink", lwd = 2)
## (no hidden lines)

# (3) Visualizing a simple DEM model

z <- 2 * volcano        # Exaggerate the relief
x <- 10 * (1:nrow(z))   # 10 meter spacing (S to N)
y <- 10 * (1:ncol(z))   # 10 meter spacing (E to W)
## Don't draw the grid lines :  border = NA
par(bg = "slategray")
persp(x, y, z, theta = 135, phi = 30, col = "green3", scale = FALSE,
      ltheta = -120, shade = 0.75, border = NA, box = FALSE)

# (4) Surface colours corresponding to z-values

par(bg = "white")
x <- seq(-1.95, 1.95, length.out = 30)
y <- seq(-1.95, 1.95, length.out = 35)
z <- outer(x, y, function(a, b) a*b^2)
nrz <- nrow(z)
ncz <- ncol(z)
# Create a function interpolating colors in the range of specified colors
jet.colors <- colorRampPalette( c("blue", "green") )
# Generate the desired number of colors from this palette
nbcol <- 100
color <- jet.colors(nbcol)
# Compute the z-value at the facet centres
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz]
# Recode facet z-values into color indices
facetcol <- cut(zfacet, nbcol)
persp(x, y, z, col = color[facetcol], phi = 30, theta = -30)

par(op)

參考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

contourimagetrans3d

可旋轉的 3D 圖可以通過包 rgl 生成:生成靜態透視圖的其他方法可以在包 lattice scatterplot3d 中找到。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Perspective Plots。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。