从(x,y,z) 坐标创建 3D 曲面图
Jesse John
2023年1月30日
R
R Plot
Base R 和几个软件包提供了在水平面上绘制 3 维表面的功能。他们中的大多数需要一个 x 和 y 值的组合作为输入的 z 值。
换句话说,他们需要一个 x-y 网格和网格上每个点的 z 值。
当我们有一个 (x,y,z) 值(坐标)的数据框或矩阵时,我们可以绘制点,但不能绘制表面。
我们需要使用给定的数据和适当的插值函数来估计所有 x 和 y 值组合的 z 值来绘制表面。
本文将展示如何使用 akima 包来估计 x-y 值网格的 z 值。然后我们将使用 rgl 包绘制曲面。
R 中 akima 包的 interp() 函数
akima 包提供了用于插值二元数据的函数。
interp() 函数采用三个向量 x、y 和 z 并返回一个 40×40 网格的 x-y 值和对应的 z 值。
默认情况下,会生成线性插值。
R 中 rgl 包的 persp3d() 函数
rgl 包创建 3D 交互式图形。我们可以使用鼠标缩放和旋转绘图。
我们将使用 persp3d() 函数绘制曲面,使用 points3d() 函数绘制原始数据。
为了在 R 中查看绘图,我们需要设置一个特定选项:options(rgl.printRglwidget = TRUE)。
函数演示
我们将通过以下步骤。
-
如果所需的软件包尚不可用,请安装它们。
-
加载所需的包。
-
创建示例数据框。
-
使用
interp()创建与x-y值网格对应的z值列表。 -
使用
persp3d()绘制曲面。 -
使用
points3d()添加点。
示例代码:
# INSTALL AND LOAD THE PACKAGES.
# Uncomment and run the concerned line to install the package.
#install.packages("akima")
library(akima)
#install.packages("rgl")
library(rgl)
# CREATE THE SAMPLE DATA.
set.seed(1)
x=rnorm(50)
set.seed(2)
y=rnorm(50)
z=c(rep(5,5),rep(-10,5), rep(3,15), rep(20,5), seq(5,15, length.out=10), rep(0,5), rep(3,5))
XYZ=data.frame(x,y,z)
# INTERPOLATE THE Z VALUES.
a_mat=interp(XYZ$x, XYZ$y, XYZ$z)
# PLOT THE SURFACE AND THE POINTS.
options(rgl.printRglwidget = TRUE)
persp3d(a_mat$x, a_mat$y, a_mat$z, col="yellow")
points3d(x,y,z, col="red")
输出图:
rgl 生成交互式 3D 绘图。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Jesse John
