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


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。