Matplotlibで立体的な表現である3D Plotを使用できるようになると、よりデータを理解しやすく視覚化できます。
ここではこれからMatplotlibを勉強し始めた方にMatplotlibの3D Plotをする方法をまとめています。
この記事の対象
ライブラリのインストール
まず、matplotlibライブラリをインストールする必要があります。matplotlibは、Pythonの標準ライブラリに含まれている場合がありますが、それ以外の場合は、pipコマンドを使用してインストールできます。
pip install matplotlib
3D scatterplot
以下では、numpyを使用して3つのランダムな変数を生成し、matplotlibのscatter関数を使用して3D散布図を作成しています。
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
#1---figureの生成
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
#2---座標の生成
x = np.random.normal(size=100)
y = np.random.normal(size=100)
z = np.random.normal(size=100)
#3---3D散布図の描画
ax.scatter(x, y, z)
plt.show()
以下は解説になります。
#1---figureの生成
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
1の部分ではプロットする対象のFigureを生成しています。次に3Dプロットを行うために、「add_subplot()」メソッドを使って、3Dの軸を設定しています。
#2---座標の生成
x = np.random.normal(size=100)
y = np.random.normal(size=100)
z = np.random.normal(size=100)
2の部分ではNumPyの「np.random.normal()」関数を使って、x,y,z座標それぞれに100個のランダムな値を生成しています。
#3---3D散布図の描画
ax.scatter(x, y, z)
plt.show()
3の部分では「scatter()」メソッドを用いて描画して、表示しています。
【結果】
3D surface
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
#1---データの作成
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
#2---プロット
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(X, Y, Z, cmap='coolwarm', linewidth=0, antialiased=False)
#3---カスタマイズ
fig.colorbar(surf, shrink=0.5, aspect=5)
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')
ax.set_title('Surface plot')
ax.view_init(elev=30, azim=135)
plt.show()
以下は解説になります。
#1---データの作成
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
1の部分ではNumPyを使用して、xとy軸の範囲を-5から5まで100個作成し、「meshgrid」関数を使用して、これらの値をXとYグリッドに変換しています。次に、sinとsqrt関数を使用して、Z値を作成しています。
#2---プロット
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(X, Y, Z, cmap='coolwarm', linewidth=0, antialiased=False)
2の部分ではfigを作成し、「add_subplot」メソッドを使用して、3D軸を作成します。「plot_surface」メソッドを使用して、X、Y、Zのプロット、カラーマップの設定、線幅を0に設定し、アンチエイリアシングをFalseに設定しています。
#3---カスタマイズ
fig.colorbar(surf, shrink=0.5, aspect=5)
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')
ax.set_title('Surface plot')
ax.view_init(elev=30, azim=135)
plt.show()
3の部分では「colorbar」メソッドを使用してカラーバーを表示し、set_xlabel、set_ylabel、set_zlabel、set_titleメソッドを使用して、それぞれのラベルを設定しています。「view_init」メソッドを使用して、視点を指定しています。
最後に、showメソッドを使用して、プロットを表示しています。
【結果】
上記では基本的なMatplotlibの使用方法を紹介しました。もっと実践的なグラフ出力を知りたい方は「現場で使える! Python科学技術計算入門」がおすすめです。
PandasやNumPyでのData処理する方法やSciPyでの高度なグラフ出力方法を押さえられます。