從(x,y,z) 座標建立 3D 曲面圖

Jesse John 2023年1月30日
  1. R 中 akima 包的 interp() 函式
  2. R 中 rgl 包的 persp3d() 函式
  3. 函式演示
從(x,y,z) 座標建立 3D 曲面圖

Base R 和幾個軟體包提供了在水平面上繪製 3 維表面的功能。他們中的大多數需要一個 xy 值的組合作為輸入的 z 值。

換句話說,他們需要一個 x-y 網格和網格上每個點的 z 值。

當我們有一個 (x,y,z) 值(座標)的資料框或矩陣時,我們可以繪製點,但不能繪製表面。

我們需要使用給定的資料和適當的插值函式來估計所有 xy 值組合的 z 值來繪製表面。

本文將展示如何使用 akima 包來估計 x-y 值網格的 z 值。然後我們將使用 rgl 包繪製曲面。

R 中 akima 包的 interp() 函式

akima 包提供了用於插值二後設資料的函式。

interp() 函式採用三個向量 xyz 並返回一個 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 繪圖。

3D 透檢視

作者: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

相關文章 - R Plot