みなさん、こんにちは、
みむすたーです。
Pythonでデータ解析や数学の式を取り扱うときに、
3D空間上に曲線を表示させたくなることがあります。
今回は、3D空間上に曲線をmatplotlibを使用して、
表示させる方法について説明します。
それではいきましょう。
もくじ
サンプルコード
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
# x, y の2次元グリッドを作成する
ax = Axes3D(fig)
# 3次元グラフの式
x, y = np.meshgrid(np.linspace(-10,10,100),np.linspace(-10,10,100))
# 3次元グラフの式
z = np.sin(x) / x + np.sin(y) / y
#グラフをワイヤーフレーム形式で表現する
cs=ax.plot_surface(x,y,z,cmap="coolwarm")
ax.set_title("x-y-z曲線", fontname="MS Gothic")
ax.set_xlabel("x軸",fontname="MS Gothic")
ax.set_ylabel("y軸",fontname="MS Gothic")
ax.set_zlabel("z軸",fontname="MS Gothic")
plt.show()
出力結果
ソースコードの説明
8行目のax = Axes3D(fig)は、3Dグラフを作成するために必要なオブジェクトです。
引数の詳細な説明は以下のリンクから確認することができます。
今回は、Figureクラスのfigオブジェクトの指定のみを指定しました。
figオブジェクトを作成すると、以下のように何も描かれていない3次元グラフが表示されます。
11行目のnp.meshgrid関数でx,y座表面に等間隔にグリッド座標を生成します。
イメージとしては、以下のような感じです。
上の青い点がmeshgridで生成したx,yのグリッド座標です。
次にz座標を決めていくために、x,yを使用してz座標を生成します。
meshgridの戻り値を代入した変数のx,yは2次元のリストになっています。
14行目の変数zへの代入では、z軸を決めています。
17行目のax.plot_surfaceで3次元グラフの種類を決定しています。
今回は、上ではsurface(面表現)プロットを行いましたが、
そのほかにもscatter(点表現)プロットやwireframe(線表現)などの種類があります。
18行目以降は、ax.set_titleやax.set_xlabel、plt.colorbarなどで、
グラフのタイトルの設定、x軸の名前、カラーバーの表示を行います。
余談になりますが、一番最初に示したsurfaceプロットの図のように、
scatterプロットでもz軸方向の値によって色の変化をつけることもできます。
ただし、wireframeはできないようです。
コメント