Matplotlibで等高線を使ったアニメーションを作成する方法
Matplotlibでは、FuncAnimationを活用することで、等高線プロットを簡単にアニメーション化できます。時間とともに変化するデータを視覚的に表現したい場合に非常に便利な手法です。ここでは、具体的な手順とサンプルコードを交えて解説します。
実装手順
図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
等高線プロットに使用するデータを作成します。
図(Figure)とサブプロット(Axes)のセットを生成します。
animate() 関数を繰り返し呼び出してアニメーションを生成します。この関数内で、各フレームごとに等高線のデータポイントを更新します。
最後に plt.show() メソッドを使って、アニメーションを表示します。
サンプルコード
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# 図のサイズを設定
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
# 等高線プロット用のランダムデータを生成
# 形状は (10, 10, 8) で、8フレーム分のデータを保持
data = np.random.randn(800).reshape(10, 10, 8)
# 図とサブプロットを作成
fig, ax = plt.subplots()
# 各フレームで等高線のデータポイントを更新する関数
def animate(i):
ax.clear()
ax.contourf(data[:, :, i], cmap='plasma')
# animate関数を呼び出してアニメーションを生成
ani = animation.FuncAnimation(fig, animate, 5, interval=50, blit=False)
# アニメーションを表示
plt.show()
コードのポイント
np.random.randn(800).reshape(10, 10, 8)により、10×10のグリッドを持つ8フレーム分の3次元配列を作成しています。ax.clear()を呼び出すことで、前のフレームの描画内容を消去し、新しいデータで再描画しています。cmap='plasma'はカラーマップの指定です。お好みに応じて'viridis'や'jet'などに変更できます。interval=50はフレーム間の遅延時間(ミリ秒)を意味し、値を小さくするとアニメーションが速くなります。blit=Falseを指定しているため、毎フレーム全体を再描画します。等高線プロットの場合、blitを有効にするとエラーが発生することがあるため、Falseが安全です。
実行結果
上記のコードを実行すると、以下のように等高線のパターンが時間とともに変化するアニメーションが表示されます。

-
Matplotlibで凡例を行ごとに2列に整列させる方法
Matplotlibの凡例(legend)を2列に整列させて表示したい場合、ncolパラメータを使うことで簡単に実現できます。以下の手順で説明します。手順図(figure)のサイズを設定し、サブプロット周辺の余白(パディング)を調整します。plot()メソッドを使用して、line1、line2、line3というラベルを持つ線を描画します。ncol=2を指定してlegend()メソッドを呼び出し、2列構成の凡例を図上に配置します。show()メソッドで図を表示します。コード例from matplotlib import pyplot as plt plt.rcParams[figure.figs
-
Matplotlibでマウスクリックイベントの座標を取得・保存する方法
Matplotlibでマウスクリック時の座標を記録したい場合は、「button_press_event」イベントを利用するのが最も簡単な方法です。この記事では、実際に動作するサンプルコードとともに、その手順をわかりやすく解説します。 実装の手順 図(figure)のサイズを設定し、サブプロット間および周囲の余白を調整します。 図とサブプロットを作成します。 0〜9の範囲で折れ線グラフを描画します。 onclick 関数を button_press_event イベントにバインドします。 イベントから取得した x 座標と y 座標を出力します。 show() メソッドで図を表示します。 サン