【Python】matplotlibで散布図アニメーションを作成してGIFとして保存する方法
データの時間変化を視覚的に表現したい場合、matplotlibのアニメーション機能が非常に便利です。この記事では、散布図(scatter plot)をアニメーション化し、GIFファイルとして保存する具体的な手順を解説します。
散布図アニメーションを保存する手順
matplotlibで散布図アニメーションを保存するには、以下の手順に従います。
figure.figsizeで図のサイズを設定し、figure.autolayoutでサブプロット周辺の余白を自動調整します。- ステップ数(steps)、ノード数(nodes)、座標(positions)、解の値(solutions)の4つの変数を初期化します。
- ループ処理で各フレームのpositionsとsolutionsの値をリストに追加していきます。
plt.subplots()で図とサブプロットを作成します。- マーカーのサイズを指定する変数を定義します。
- グリッド線の表示設定を行います。
animate関数を繰り返し呼び出すことでアニメーションを生成します。この関数内では、既存の軸をクリアし、新しいサブプロットを追加して、その上に散布図を描画します。ani.save()を使って、アニメーション付き散布図を.gifファイルとして保存します。
サンプルコード
以下は、ランダムなデータを使って50フレームの散布図アニメーションを生成し、「animation.gif」として保存する完全なコード例です。
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
steps = 50
nodes = 100
positions = []
solutions = []
for i in range(steps):
positions.append(np.random.rand(2, nodes))
solutions.append(np.random.random(nodes))
fig, ax = plt.subplots()
marker_size = 50
def animate(i):
fig.clear()
ax = fig.add_subplot(111, aspect='equal', autoscale_on=False, xlim=(0, 1), ylim=(0, 1))
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
s = ax.scatter(positions[i][0], positions[i][1], s=marker_size, c=solutions[i], cmap="RdBu_r", marker="o", edgecolor='black')
plt.grid(b=None)
ani = animation.FuncAnimation(fig, animate, interval=100, frames=range(steps))
ani.save('animation.gif', writer='pillow')
コードのポイント解説
- FuncAnimation:
interval=100により、各フレームが100ミリ秒ごとに切り替わります。frames=range(steps)で50フレーム分のアニメーションを生成します。 - カラーマップ:
cmap="RdBu_r"を指定することで、solutionsの値に応じて点が赤〜青のグラデーションで色分けされます。 - 保存方法:
writer='pillow'を指定すると、Pillowライブラリ経由でGIF形式に出力できます。事前にpip install pillowでインストールしておきましょう。
実行結果
スクリプトを実行すると、カレントディレクトリに「animation.gif」が出力され、ノードが動き回る散布図アニメーションを確認できます。ブラウザや画像ビューアで開けば、時間の経過とともに点の位置と色が変化していく様子がわかります。
-
Matplotlibでエッジカラー付きの長方形を描画する方法
Matplotlibで長方形にエッジカラー(枠線の色)を設定して描画するには、以下の手順に従います。figure() メソッドを使用して、新しい図を作成するか、既存の図をアクティブにします。add_subplot() メソッドで、現在の図にサブプロット(Axes)を追加します。Rectangle() クラスを使用して長方形のインスタンスを作成し、edgecolor(枠線の色)と linewidth(枠線の太さ)を指定します。塗りつぶしの色は facecolor で設定できます。add_patch() メソッドを使って、作成した長方形をプロットに追加します。長方形の中にテキストを配置したい場合は
-
Matplotlibでnumpyのdatetime64型の時系列データをプロットする方法
PythonのMatplotlibを使って時系列データをグラフ化する方法を解説します。日付や時刻のデータ(datetime64型など)は、そのままplot()メソッドに渡すだけで自動的に軸に反映されるため、非常に簡単です。基本的な手順numpyを使ってx(日時)とy(数値)のデータを作成する。plot()メソッドで作成したxとyをプロットする。show()メソッドで図を表示する。サンプルコードimport matplotlib.pyplot as plt import datetime import numpy as np plt.rcParams[figure.figsize] = [7.