Pythonのmatplotlibを使って3次元プロットを実装する方法

スポンサーリンク

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()

結果は以下の通りです。

出力 :

Axes
Axes

ここでは、標高と軸の角度(度)の2つの引数を挙げている。

別の角度で試してみましょう。

Plot With Title
Plot With Title

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

Spiral
Spiral

6. ワイヤーフレームのプロット

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

Changing Viewing Angle
Changing Viewing Angle

結果は以下の通りです。

出力:

Example 2
Example 2

ここでは、np.meshgridという関数で、座標ベクトルから座標行列を生成しています。

同様に、サーフェスプロットを作成することもできます。

次節でその方法を学びましょう。

7. サーフェスプロットを作成する


上記と同じデータでサーフェスプロットを作成することができます

3次元のサーフェスプロットを作成するために、plot_surface()メソッドを使用します。

Wireframe
Wireframe

結果は以下の通りです。

Surfaceplot
Surface-plot

ここで、以下の引数の意味は以下の通りです。

| — | — |
| rstride|配列の行の長さ(ステップサイズ)|cstride|配列の列の長さ(ステップサイズ)|etc.
| cstride|配列の列のストライド(ステップサイズ)||。

| camp|表面パッチのためのカラーマップ。

まとめ

このチュートリアルは Python での 3 次元プロットについてでした。

データ点と一緒に 3 次元の軸をプロットする方法を学びました。

mplot3d でさらに多くの 3 次元図形を学ぶには、それらの公式ドキュメントを参照してください。

タイトルとURLをコピーしました