Matplotlibでカラーバーをアニメーション化する方法
Matplotlibでは、FuncAnimationとmake_axes_locatableを組み合わせることで、カラーバー(カラーマップ)をアニメーションとして動的に変化させることができます。以下にその具体的な手順を紹介します。
実装の手順
図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
新しい図を作成するか、既存の図をアクティブにします。
サブプロット構成の一部として、図に ~.axes.Axes を追加します。
既存のaxesオブジェクト(ax)をもとに Divider を生成し、指定したセルに対する新しい軸ロケーターを取得します。
メインaxesと同じ高さ(または幅)を持つaxesを、指定した位置に作成します。これがカラーバー用の領域になります。
NumPyを使ってランダムなデータを作成します。
imshow() メソッドでランダムデータを画像として描画します。
プロットにタイトルを設定します。
切り替え用のカラーマップのリストを用意します。
animate() 関数内でデータとカラーマップを更新し、FuncAnimation を使ってカラーバーのアニメーションを実現します。
show() メソッドで図を表示します。
サンプルコード
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from mpl_toolkits.axes_grid1 import make_axes_locatable
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig = plt.figure()
ax = fig.add_subplot(111)
div = make_axes_locatable(ax)
cax = div.append_axes('right', '5%', '5%')
data = np.random.rand(5, 5)
im = ax.imshow(data)
cb = fig.colorbar(im, cax=cax)
tx = ax.set_title('Frame 0')
cmap = ["copper", "RdBu_r", "Oranges", "cividis", "hot", "plasma"]
def animate(i):
cax.cla()
data = np.random.rand(5, 5)
im = ax.imshow(data, cmap=cmap[i%len(cmap)])
fig.colorbar(im, cax=cax)
tx.set_text('Frame {0}'.format(i))
ani = animation.FuncAnimation(fig, animate, frames=10)
plt.show()コードのポイント
make_axes_locatable を使うことで、メインのaxesにぴったり揃ったカラーバー用のaxesを簡単に作成できます。
animate() 内で cax.cla() を呼び出してカラーバーを毎フレーム初期化し、新しいカラーマップで再描画しています。
i % len(cmap) により、フレーム数がカラーマップの種類より多くてもリストを循環的に使い回せます。
frames=10 を指定することで、10フレーム分のアニメーションが生成されます。
出力結果
このコードを実行すると、ランダムデータのヒートマップとそれに対応するカラーバーが、フレームごとに異なるカラーマップへと切り替わりながらアニメーション表示されます。
-
MatplotlibでFigureからカラーバーのインスタンスを取得する方法
概要MatplotlibでFigureからカラーバーのインスタンスを取得するには、imshow()が返すScalarMappableオブジェクトをcolorbar()メソッドに渡します。これにより、戻り値としてカラーバーのインスタンスを受け取ることができます。手順-1〜1の範囲の値を持つ10×10のランダムな配列データを生成します。imshow()メソッドを使用して、データを2次元の正規ラスタ(画像)として表示します。imshow()が返すScalarMappableインスタンスをcolorbar()に渡し、カラーバーを作成すると同時にそのインスタンスを取得します。show()メソッドを使用し
-
Matplotlibでpcolormeshをアニメーション化する方法【コード例付き解説】
Matplotlibでpcolormesh(擬似カラープロット)をアニメーション化する方法を、具体的な手順とサンプルコード付きで解説します。 アニメーション化の基本的な流れ pcolormeshをアニメーションさせるには、以下の手順に従います。 figureオブジェクトとサブプロットを作成する numpyを使ってx、y、tのデータポイントを生成する meshgrid関数で座標ベクトルから座標行列(X3、Y3、T3)を作成する pcolormesh()メソッドを使って、不規則な矩形グリッド上に擬似カラープロットを描画する カラーバーをfigureに追加する FuncAnimationクラスを使