matplotlibで3次元の散布図を描画する方法について解説します。(カラーバーに関する記事はこちらに移動しました。)
3次元散布図
3次元の散布図を描画する場合、mpl_toolkits.mplot3d.axes3dというライブラリを追加でインポートします。add_subplotの引数にprojection='3d'を指定します。
from matplotlib import pyplot as plt import numpy as np # ランダムな点を生成 x = np.random.rand(50) y = np.random.rand(50) z = np.random.rand(50) # figureを生成 fig = plt.figure() # axをfigureに設定 ax = fig.add_subplot(1, 1, 1, projection='3d') # axesにplot ax.scatter(x, y, z, c='b') # 表示する plt.show()
なお、出力結果についてはマウスのドラッグ・アンド・ドロップで方向を動かすことも可能です。
描画する点が多くなると、環境によってはレンダリングに時間がかかります。あと、奥の点ほど色が薄く描画されていますが、点が持つ値が表現されているわけではないという点に留意してください。点が持つ値や量を表す場合は次に説明するカラーバーを利用してください。
3次元でカラーバーを利用する場合
先程の散布図では単純に3次元空間上の点の分布について表現していました。カラーバーを使うと3次元上の点の分布に加え、それぞれ持つ量を可視化することが可能です。例えば観測施設内に設置したセンサーで得た気温等の値の分布を表現することが可能です。カラーマップを使用しますがそれについては前回の記事を参照してください。matplotlib カラーバー付き散布図
from matplotlib import pyplot as plt import numpy as np # ランダムな点を生成する(x, y, z座標) x = np.random.rand(50) y = np.random.rand(50) z = np.random.rand(50) # 点(x, y, z)がもつ量 value = np.random.rand(50) # figureを生成する fig = plt.figure() # axをfigureに設定する ax = fig.add_subplot(1, 1, 1, projection='3d') # カラーマップを生成 cm = plt.cm.get_cmap('RdYlBu') # axに散布図を描画、戻り値にPathCollectionを得る mappable = ax.scatter(x, y, c=value, cmap=cm) fig.colorbar(mappable, ax=ax) # 表示する plt.show()
上のサンプルコードでは3次元上の座標列x, y, zに加え、valueがそれぞれの点がもつ値の配列を表しています。
matplotlib3.5以前
古いバージョンについては以下の通りAxes3Dを使用します。
from matplotlib import pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D # ランダムな点を生成する(x, y, z座標) x = np.random.rand(50) y = np.random.rand(50) z = np.random.rand(50) # figureを生成 fig = plt.figure() # axをfigureに設定 ax = Axes3D(fig, auto_add_to_figure=False) fig.add_axes(ax) # axesに散布図を設定 ax.scatter(x, y, z, c='b') # 表示 plt.show()