mplot3d.Axes3D – 3次元グラフの概要

概要

Pythonのライブラリーを使った3次元グラフ表示の概要をまとめる。大きな流れは以下の通り。

Axes3Dオブジェクトの生成で以下のようにしている例もあるが、古いバージョンのものであり、matplotlibのチュートリアルでは上記の方法を推奨している。

なお、FigureオブジェクトとAxes3Dオブジェクトを1行で生成する方法がこちらに紹介されている。この方法だと1行ですみ、複数のAxes3Dを一度に生成できる。

各種描画処理

scatter~点の表示

2次元のscatterと同じで、x, y, zの3次元の座標を配列で指定。以下の例では立方体の8つの頂点を3次元空間内に表示する。

このコードの概要は以下の通り。

  1. 8つの頂点の座標の準備
    • x, y, zの座標ごとに配列で準備
  2. figureオブジェクトの取得
  3. axesオブジェクトの取得
  4. x,y,z軸の範囲を設定
    • 3次元用のメソッドaxes.set_xlim3d(min, max)などで指定
  5. 点の表示
    • axes.scatter(x, y, z)と3次元座標で指定

なお、上記の表示結果はマウスでドラッグして回転することができる。

plot~曲線の表示

Axes3D.plot(x, y, z)によって、3次元空間内に曲線を描く。

以下の例は、パラメータ表示された以下の曲線を描いている。

(1)    \begin{align*} x = t \cos t,\quad y = t \sin t,\quad z = t \qquad (0 \le t \le 8 \pi) \end{align*}

plot_wireframe/plot_sufrace~曲面の表示

meshgrideで生成した座標面に対するf(x, y)の位置を使って、3次元の曲面を描く。plot_wireframeはワイヤーフレーム、plot_surfaceはワイヤーフレームの中の面が塗りつぶされる。以下の例では、z = x2 + y2の関数の形状を、ワイヤーフレームと曲面で描く。

このコードの概要は以下の通り。

  1. 表示させる放物面の準備
    1. x,yの軸座標を生成
    2. numpy.meshgrid()関数で全格子点の座標を生成
    3. 格子点座標に対するzの値を計算
  2. x,y軸の軸目盛をhticksz軸の軸目盛をvticksとして準備
  3. figureの生成
  4. axesの1つ目を生成し、ワイヤーフレーム表示
    1. x,y,z軸の軸目盛をaxes.set_xticks()などのメソッドで設定
    2. ワイヤーフレームの描画ax1.plot_wireframe(x, y, z)
  5. axesの2つ目を生成し、曲面表示
    1. x,y,z軸の軸目盛をaxes.set_xticks()などのメソッドで設定
    2. 曲面の描画ax1.plot_surface(x, y, z)

コンターの表示

指定したz座標の位置に、f(x, y)のコンターを描く。以下の例では、z = x2 + y2の関数の曲面を描き、z=0の面にコンターを描く。

このコードの手順は上の曲面の表示とほぼ同じで、上記と異なる点は以下の通り。

  • 2つの関数のコンターを比べるのに、xy平面上の点の原点からのL2ノルムとL1ノルムを使っている。
  • axes.contour()関数でコンターを描画している。
    • contour(x, y, z, offset)offsetは、コンターを表示する平面のzの値で指定