R で 3D 透視図を作成する

Jesse John 2023年1月30日
  1. R の persp() 関数の引数
  2. R での平面のプロット
  3. R の行列からプロット
R で 3D 透視図を作成する

ベース R の persp() 関数を使用して、サーフェスの透視プロットを作成できます。サーフェスは、(x,y) 値のすべてのペアに対応する z 値を通過します。

persp() 関数を使用するには、その主な引数の形式を理解する必要があります。この記事の残りの部分では、これらを簡単な例で示して説明します。

R の persp() 関数の引数

persp() は 3 次元でプロットされるため、3つの座標には xyz の 3つの引数があります。

  1. xy は数値ベクトルです。これらは昇順である必要があります。

  2. 引数 z は行列を取ります。このマトリックスには、xy の各組み合わせに対応する z の値が 1つ存在する必要があります。

    プロットされるサーフェスは、すべての z 値を通過します。

z の行列を作成する 1つの方法は、outer() 関数を使用して、xy の値のすべての組み合わせに 2 変量関数を適用することです。

デフォルトでは、persp() 関数は y 軸の負の側からのビューを表示します。

  1. phi 引数は余緯度を示します。phi を 0 度から 90 度に変更すると、ビューを正面から上部に変更することに影響します。
  2. theta 引数は方位角を示します。theta を 0 度から 90 度に変更すると、図形を垂直軸を中心に時計回りに回転させる効果があります。

R での平面のプロット

次に、2つの平面を作成し、それらを異なる角度から表示します。1つ目は水平面です。

サンプルコード:

# A function that gives a constant z value.
H = function(x, y){
  return (0*x+0*y+1)
}

X = seq(-1,1,length.out=5)
Y = seq(-1,1, length.out=5)

# Apply the H function to all pairs (x,y).
# This gives the z matrix.
Z = outer(X, Y, H)

# Four different views.
persp(x=X,y=Y,z=Z, theta=0, phi=0, xlim=range(-2,2), ylim=range(-2,2), zlim=range(-2,2))
persp(x=X,y=Y,z=Z, theta=0, phi=45, xlim=range(-2,2), ylim=range(-2,2), zlim=range(-2,2))
persp(x=X,y=Y,z=Z, theta=0, phi=90, xlim=range(-2,2), ylim=range(-2,2), zlim=range(-2,2))
persp(x=X,y=Y,z=Z, theta=45, phi=45, xlim=range(-2,2), ylim=range(-2,2), zlim=range(-2,2))

出力図形:

水平面のプロット

4つの図は、角度 thetaファイを変更した場合の効果を示しています。

次に、傾斜面を見てみましょう。この構文は、他の persp() 関数の引数の設定も示しています。

サンプルコード:

# A function for a plane.
O = function(x, y){
  return (2*x+3*y-2)
}

X1 = seq(-2,2,length.out=15)
Y1 = seq(-2,2, length.out=15)

# Apply the function to all combinations of x and y.
Z1 = outer(X1, Y1, O)

# Check the range of the values of Z.
# This will help create the limits for the box.
range(Z1)

# Because we do not use the scale=FALSE argument, the output is a cube.
# The axes are scaled.
persp(x=X1,y=Y1,z=Z1, theta=20, phi=10, xlim=range(-5,5), ylim=range(-5,5), zlim=range(-12,8),
      xlab="x-axis",
      ylab="y-axis",
      zlab="z-axis",
      main="Oblique Plane",
      col="#00FFFF",
      ticktype="detailed",
      nticks=3)

# With scale=FALSE.
persp(x=X1,y=Y1,z=Z1, theta=-15, phi=5, xlim=range(-5,5), ylim=range(-5,5), zlim=range(-12,8),
      scale = FALSE,
      xlab="x-axis",
      ylab="y-axis",
      zlab="z-axis",
      main="Oblique Plane",
      col="#FF00FF",
      ticktype="detailed",
      nticks=3)

出力図形:

傾斜面のプロット

R の行列からプロット

persp() 関数は、ベクトル x および y に対応する z 値の行列から昇順でプロットできます。

z の行と列の数は、それぞれ xy の長さと一致する必要があります。

サンプルコード:

# Manually create a matrix of z values corresponding
# to all combinations of some x and y.
# (Or use such a pre-existing matrix.)
Z2 = matrix(data=c(1,1,1,1,1,
                  1,-1,-1,-1,1,
                  1,-1,3,-1,1,
                  1,-1,-1,-1,1,
                  1,1,1,1,1), ncol=5)

X2 = seq(-4, 4, length.out=5)
Y2 = seq(-2, 2, by=1)

persp(x=X2, y=Y2, z=Z2, scale=FALSE, col="#CBD68A", theta=30, phi=15)

出力図:

行列からプロット

著者: 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