(x,y,z) 座標から 3D サーフェスプロットを作成する
Jesse John
2023年1月30日
ベース 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 プロットを生成します。
著者: Jesse John