Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibでカラーバーをアニメーション化する方法

Matplotlibでは、FuncAnimationmake_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フレーム分のアニメーションが生成されます。

出力結果

このコードを実行すると、ランダムデータのヒートマップとそれに対応するカラーバーが、フレームごとに異なるカラーマップへと切り替わりながらアニメーション表示されます。

  1. MatplotlibでFigureからカラーバーのインスタンスを取得する方法

    概要MatplotlibでFigureからカラーバーのインスタンスを取得するには、imshow()が返すScalarMappableオブジェクトをcolorbar()メソッドに渡します。これにより、戻り値としてカラーバーのインスタンスを受け取ることができます。手順-1〜1の範囲の値を持つ10×10のランダムな配列データを生成します。imshow()メソッドを使用して、データを2次元の正規ラスタ(画像)として表示します。imshow()が返すScalarMappableインスタンスをcolorbar()に渡し、カラーバーを作成すると同時にそのインスタンスを取得します。show()メソッドを使用し

  2. Matplotlibでpcolormeshをアニメーション化する方法【コード例付き解説】

    Matplotlibでpcolormesh(擬似カラープロット)をアニメーション化する方法を、具体的な手順とサンプルコード付きで解説します。 アニメーション化の基本的な流れ pcolormeshをアニメーションさせるには、以下の手順に従います。 figureオブジェクトとサブプロットを作成する numpyを使ってx、y、tのデータポイントを生成する meshgrid関数で座標ベクトルから座標行列(X3、Y3、T3)を作成する pcolormesh()メソッドを使って、不規則な矩形グリッド上に擬似カラープロットを描画する カラーバーをfigureに追加する FuncAnimationクラスを使