概要
matplotlibで3次元ヒートマップを作る方法を紹介します。3次元空間に別の次元、例えば温度の次元を加えたりする場合に役立つと思います。
Google Colabで作成したコードは、こちらにあります。
手順
- 各種インポートします。(各モジュールの実行時のversionは、Google Colab内で作成したコードにあります。)
- 3次元ヒートマップを作ります。
1. 各種インポート
各種インポート
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
from matplotlib import colors
各モジュールの実行時のversionは、Google Colab内で作成したコードこちらにあります。
2. 3次元ヒートマップを作成
3次元ヒートマップ
# 3次元ヒートマップ
fig = plt.figure(figsize=(13, 10))
ax = fig.add_subplot(111, projection='3d')
# プロット内容
x = np.arange(0, 100, 1)
y = np.arange(0, 100, 1)
X, Y = np.meshgrid(x, y)
Z = 0.01*(X*np.sin(0.1*X) + Y*np.cos(0.1*Y))
# heatmapの内容
myheatdata = np.sin(0.15*X) + np.cos(0.15*Y)
# heatmapの内容をfacecolors用に[0-1]に正規化
norm = colors.Normalize(vmin=np.min(myheatdata), vmax=np.max(myheatdata))
norm_myheatdata = norm(myheatdata)
# プロット
surf = ax.plot_surface(X, Y, Z,
facecolors=cm.CMRmap(norm_myheatdata),
cmap=plt.get_cmap('CMRmap')
)
# 軸ラベル
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
# カラーバーを表示(カラーバーに使う目盛は正規化前のheatdataの尺度で表示する)
m = cm.ScalarMappable(cmap=surf.cmap, norm=norm)
m.set_array(myheatdata)
fig.colorbar(m, shrink=0.6, label='myheatdata')
plt.show()
まとめ
matplotlibで3次元ヒートマップを作る方法を紹介しました。
3次元ヒートマップを作る場面は少ないと思いますが、誰かの役に立てれば幸いです。