2次元のプロットと同じように、Pythonでもmatplotlibを使って3次元のプロットを作成することができます。
この記事では、matplotlib を使用して 3 次元プロットを作成する方法を学びます。
How to Plot 3-Dimensional Plot in Python?
ここでは、matpotlib ライブラリとともに mplot3d ツールキットを使用する予定です。
mplot3d ツールキットは matplotlib ライブラリの上に構築されており、3次元のプロットを簡単に作成することができます。
では、早速始めましょう。
1. 必要なモジュールのインポート
まず始めに、matplotlibとmplot3dツールキットをインポートします。
また、サンプルデータを作成するためにnumpyもインポートします。
この3つをインポートするためのコードは以下の通りです。
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
|
2. 3次元軸の作成
インポートしたモジュールを使って、3次元の軸を作ることができる。
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axesfig = plt.figure()
ax = plt.axes(projection='3d')
plt.show() |
結果は以下の通りです。
ax.set_title('Learning about 3D plots')
|
さて、軸ができたので、何かをプロットしてみましょう。
プロットするとき、3つの軸(x,y,z)すべてに値を与えることを確認する必要があります。
次のセクションでは、正弦波関数(サインとコサイン)を使って螺旋を作る方法を学びます。
その前に、プロットにタイトルを追加する方法を学びます。
3. プロットにタイトルを追加する
setttp_title() メソッドを使用すると、プロットにタイトルを追加することができます。
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axesfig = plt.figure()
ax = plt.axes(projection='3d')
#set titleax.set_title('Learning about 3D plots')
plt.show() |
上記のコードが動作しているのを見るには、次のコードを実行してください。
z = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
|
結果は以下の通りです。
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axesfig = plt.figure()
ax = plt.axes(projection='3d')
#cordiates for spiralz = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
ax.plot3D(x, y, z, 'red')
plt.show() |
4. スパイラルの作成
スパイラルを作成するために、X軸にサイン関数、Y軸にコサイン関数を使用します。
スパイラルのデータポイントは次のように生成される。
ax.view_init(60, 50)
|
ここで、関数np.linespaceは0から15の間の1000個の等間隔な点を与える。
完全なコードは次の通りです。
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axesfig = plt.figure()
ax = plt.axes(projection='3d')
#cordiates for spiralz = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
ax.plot3D(x, y, z, 'red')
ax.view_init(60, 50)
plt.show() |
結果は以下の通りです。
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axesfig = plt.figure()
ax = plt.axes(projection='3d')
#cordiates for spiralz = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
ax.plot3D(x, y, z, 'red')
ax.view_init(120, 90)
plt.show() |
5. 見る角度を変える
3次元プロットは、見る角度によって見え方が異なります。
3次元プロットの視野角は、view_init()メソッドで変更することができます。
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axesfig = plt.figure()
ax = plt.axes(projection='3d')
#function for Z valuesdef f(x, y):
return np.cos(np.sqrt(x ** 2 + y ** 2))
# x and y valuesx = np.linspace(1, 10, 10)
y = np.linspace(1, 10, 10)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
ax = plt.axes(projection ='3d')
ax.plot_wireframe(X, Y, Z, color ='red')
plt.show() |
以下はそのコードです。
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axesfig = plt.figure()
ax = plt.axes(projection='3d')
#function for Z valuesdef f(x, y):
return np.cos(np.sqrt(x ** 2 + y ** 2))
# x and y values x = np.linspace(1, 10, 10)
y = np.linspace(1, 10, 10)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
ax = plt.axes(projection ='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
cmap='viridis')
plt.show() |
結果は以下の通りです。
出力 :

ここでは、標高と軸の角度(度)の2つの引数を挙げている。
別の角度で試してみましょう。

出力は以下のようになります。

6. ワイヤーフレームのプロット
下記の例のように、3次元のワイヤーフレームを plot_wireframe() メソッドでプロットすることができます。

結果は以下の通りです。
出力:

ここでは、np.meshgridという関数で、座標ベクトルから座標行列を生成しています。
同様に、サーフェスプロットを作成することもできます。
次節でその方法を学びましょう。
7. サーフェスプロットを作成する
上記と同じデータでサーフェスプロットを作成することができます。
3次元のサーフェスプロットを作成するために、plot_surface()メソッドを使用します。

結果は以下の通りです。

ここで、以下の引数の意味は以下の通りです。
| — | — |
| rstride|配列の行の長さ(ステップサイズ)|cstride|配列の列の長さ(ステップサイズ)|etc.
| cstride|配列の列のストライド(ステップサイズ)||。
| camp|表面パッチのためのカラーマップ。
まとめ
このチュートリアルは Python での 3 次元プロットについてでした。
データ点と一緒に 3 次元の軸をプロットする方法を学びました。
mplot3d でさらに多くの 3 次元図形を学ぶには、それらの公式ドキュメントを参照してください。