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 |
包含要绘制的值的矩阵(允许 |
xlim , ylim , zlim |
x、y 和z-limits。应选择这些以覆盖表面值的范围:请参阅“详细信息”。 |
xlab , ylab , zlab |
轴的标题。注意:这些必须是字符串;不接受表达式。数字将被强制转换为字符串。 |
main , sub |
主标题和副标题,如 |
theta , phi |
定义观察方向的角度。 |
r |
视点距绘图框中心的距离。 |
d |
可用于改变透视变换强度的值。 |
scale |
在查看之前,定义表面的点的 x、y 和 z 坐标将转换为区间 [0,1]。如果 |
expand |
应用于 |
col |
表面刻面的颜色。透明颜色将被忽略。这将被回收到 方面。 |
border |
围绕表面刻面绘制的线条的颜色。默认值 |
ltheta , lphi |
如果为 |
shade |
表面小平面处的阴影计算为 |
box |
是否应该显示表面的边界框。默认为 |
axes |
应在框中添加刻度线和标签。默认为 |
ticktype |
字符: |
nticks |
在轴上绘制的刻度线的(近似)数量。如果 |
... |
额外的graphical parameters(参见 |
细节
通过首先使用提供的或根据数据范围计算的限制将 (x,y,z) 坐标转换为区间 [0,1] 来生成绘图。然后通过从 theta
和 phi
定义的方向查看原点来查看表面。如果theta
和phi
均为零,则观察方向直接沿负 y 轴向下。更改 theta
将改变方位角并更改 phi
余纬度。
绘图完成后会调用一个名为"persp"
(请参阅setHook
)的钩子,该钩子在测试代码中用于注释绘图页面。调用钩子函数时不带参数。
请注意,persp
将 z
矩阵解释为 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.
也可以看看
可旋转的 3D 图可以通过包 rgl
生成:生成静态透视图的其他方法可以在包 lattice
和 scatterplot3d
中找到。
相关用法
- R plot.histogram 绘制直方图
- R points 向绘图添加点
- R pairs 散点图矩阵
- R plot.raster 绘制光栅图像
- R plot.factor 绘制因子变量
- R plot.table 表对象的绘图方法
- R polygon 多边形绘制
- R plot.default 默认散点图函数
- R plot.window 设置图形窗口的世界坐标
- R plot.xy 基本内部绘图函数
- R pie 饼状图
- R par 设置或查询图形参数
- R polypath 路径绘制
- R panel.smooth 简单面板图
- R plot.design 绘制设计或模型的单变量效应
- R plot.formula 散点图的公式表示法
- R plot.data.frame DataFrame 的绘图方法
- R legend 将图例添加到绘图中
- R barplot 条形图
- R stem 茎叶图
- R mtext 将文本写入绘图的边距
- R arrows 将箭头添加到绘图中
- R contour 显示轮廓
- R stars 星图(蜘蛛图/雷达图)和线段图
- R box 在地块周围画一个方框
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Perspective Plots。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。