(x,y,z) 座標から 3D サーフェスプロットを作成する
Jesse John
2023年1月30日
R
R Plot
ベース R といくつかのパッケージは、水平面上に 3 次元表面をプロットする機能を提供します。それらのほとんどは、入力として x と y の値のすべての組み合わせに対して z 値を必要とします。
つまり、グリッド上の各ポイントに x-y グリッドと z 値が必要です。
(x,y,z) 値(座標)のデータフレームまたはマトリックスがある場合、ポイントはプロットできますが、サーフェスはプロットできません。
与えられたデータと適切な補間関数を使用して表面をプロットすることにより、x 値と y 値のすべての組み合わせについて z 値を推定する必要があります。
この記事では、akima パッケージを使用して、x-y 値のグリッドの z 値を推定する方法を示します。次に、rgl パッケージを使用してサーフェスをプロットします。
R の akima パッケージの interp() 関数
akima パッケージは、二変量データの補間のための関数を提供します。
interp() 関数は、3つのベクトル x、y、および z を取り、対応する z 値を持つ x-y 値の 40 行 40 列のグリッドを返します。
デフォルトでは、線形補間が生成されます。
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 プロットを生成します。

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
著者: Jesse John
