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 axes fig = 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 axes fig = plt.figure()
ax = plt.axes(projection = '3d' )
#set title ax.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 axes fig = plt.figure()
ax = plt.axes(projection = '3d' )
#cordiates for spiral z = 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 axes fig = plt.figure()
ax = plt.axes(projection = '3d' )
#cordiates for spiral z = 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 axes fig = plt.figure()
ax = plt.axes(projection = '3d' )
#cordiates for spiral z = 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 axes fig = plt.figure()
ax = plt.axes(projection = '3d' )
#function for Z values def 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_wireframe(X, Y, Z, color = 'red' )
plt.show() |
以下はそのコードです。
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axes fig = plt.figure()
ax = plt.axes(projection = '3d' )
#function for Z values def 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 次元図形を学ぶには、それらの公式ドキュメントを参照してください。