matplotlib.animationでffmpegを正しく有効化する方法【mp4保存まで解説】
matplotlib.animation で ffmpeg を有効にする方法
matplotlib.animation で作成したアニメーションを mp4 形式で保存するには、ffmpeg を適切に有効化しておく必要があります。本記事では、必要な事前準備から実際のサンプルコード、実行結果までをわかりやすく解説します。
事前準備:ffmpeg のインストール
まず、システムに ffmpeg がインストールされていることを確認してください。未インストールの場合は、OS に応じて以下のコマンドで導入できます。
# Ubuntu / Debian sudo apt-get install ffmpeg # macOS(Homebrew) brew install ffmpeg # Windows winget install ffmpeg
PATH が通っていない環境では、コード内で ffmpeg のフルパスを明示的に指定することも可能です。
plt.rcParams['animation.ffmpeg_path'] = '/usr/bin/ffmpeg' # 環境に合わせて変更
実装手順
- 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。
- ffmpeg の実行パスを rcParams で指定します。
- figure() メソッドを使って、新しい図を作成(または既存の図をアクティブ化)します。
- add_subplot() で図に Axes(ax)を追加します。
- make_axes_locatable() を使い、既存の Axes を基準にカラーバー用の領域を確保します。
- np.random.rand() で表示用のランダムデータを生成し、imshow() メソッドで 2D ラスタ画像として描画します。
- ScalarMappable インスタンス(cb)に対して fig.colorbar() でカラーバーを作成します。
- 現在のフレーム番号をタイトルとして設定します。
- 切り替え用のカラーマップのリストを作成します。
- animate 関数を繰り返し呼び出す FuncAnimation でアニメーションを構築します。関数内では新しいランダムデータを生成し、imshow() で再描画します。
- パイプベースの FFMpegWriter のインスタンスを取得します。
- ani.save() で現在のアニメーションを mp4 ファイルとして保存します。
サンプルコード
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
plt.rcParams['animation.ffmpeg_path'] = 'ffmpeg'
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)
FFwriter = animation.FFMpegWriter()
ani.save('plot.mp4', writer=FFwriter)
コードのポイント
animate 関数内では cax.cla() を呼び出してカラーバーを毎フレーム初期化しています。これにより、カラーマップが変わってもスケールが正しく更新されます。また、cmap=cmap[i%len(cmap)] とすることで、フレーム番号に応じてカラーマップを順番に切り替えています。
実行結果
コードを実行すると、「plot.mp4」という名前の mp4 ファイルが生成され、プロジェクトディレクトリに保存されます。動画を再生すると、フレームごとにカラーマップが変化しながらランダムデータが更新されるアニメーションを確認できます。
-
Matplotlibで3Dバー(3D棒グラフ)に凡例を追加する方法
Matplotlibで3D棒グラフ(3Dバー)に凡例を追加したい場合、bar3d()メソッドでバーを描画し、legend()メソッドを使って凡例を配置します。この記事では、緑と赤の2種類の3Dバーを描画し、それぞれに凡例ラベルを付ける具体的な手順をサンプルコード付きで解説します。 実装の手順 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。 figure()メソッドで新しい図を作成します。 add_subplot()で projection=3d を指定し、3D描画用のAxesを追加します。 numpyを使って x3、y3、z3、dx、dy、dz の各データリス
-
FlaskでMatplotlibのグラフを表示する方法【サンプルコード付き】
Webアプリケーション上でグラフを動的に表示したい場合、FlaskとMatplotlibを組み合わせるのが効果的です。この記事では、Flaskアプリケーション内でMatplotlibのプロットをPNG画像としてブラウザに返す方法を、具体的な手順とサンプルコードとともにわかりやすく解説します。 実装の流れ FlaskでMatplotlibのグラフを表示するまでの基本的な手順は以下の通りです。 小さなFlaskアプリケーションを作成する カレントディレクトリに移動し、環境変数を設定してアプリを起動する$ export FLASK_APP=file.py$ flask run ブラウザで http