※このページではアフィリエイト広告を利用しています

【Python応用】Matplotlibで3D Plotをする方法-まとめ-

Python

Matplotlibで立体的な表現である3D Plotを使用できるようになると、よりデータを理解しやすく視覚化できます。

ここではこれからMatplotlibを勉強し始めた方にMatplotlibの3D Plotをする方法をまとめています。

この記事の対象

  • Matplotlibを勉強し始めた方
  • Matplotlibで3D Plotする方法を知りたい方
  • 3D scatterplotの使用方法を知りたい方
スポンサーリンク
スポンサーリンク

ライブラリのインストール

まず、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での高度なグラフ出力方法を押さえられます。

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