从(x,y,z) 坐标创建 3d 曲面图
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 绘图。
转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处
本文地址:
相关文章
发布时间:2024/02/05 浏览次数:207 分类:编程语言
-
本文介绍了如何交互式清除 r 控制台。
发布时间:2024/02/05 浏览次数:160 分类:编程语言
-
本文介绍如何用键盘或鼠标停止运行r代码。
发布时间:2024/02/05 浏览次数:223 分类:编程语言
-
本教程演示了如何设置 r 便携版。
发布时间:2023/03/21 浏览次数:72 分类:编程语言
-
一项常见的数据分析任务是根据同一行的其他列使用一个或多个条件创建或更新数据框列。 如果我们尝试使用 if 语句来执行此操作,则只会使用第一行来测试条件,并且会根据该行更
发布时间:2023/03/21 浏览次数:198 分类:编程语言
-
在这篇文章中,你将会了解到两个在 r 中读取 xlsx 文件的最完整和最容易使用的库:readxl 和 openxlsx。
发布时间:2023/03/21 浏览次数:371 分类:编程语言
-
在本教程中,你将学习如何在 r 中编写一个函数,在不需要重新启动 r 的情况下清除环境。
发布时间:2023/03/21 浏览次数:164 分类:编程语言
-
本教程演示了如何检查 r 的版本。
发布时间:2023/03/21 浏览次数:222 分类:编程语言
-
本教程演示了如何在 r 中创建一个空向量。
发布时间:2023/03/21 浏览次数:176 分类:编程语言
-
本教程演示了如何在 r 向量中查找元素的索引。