MatplotlibのアニメーションでX軸の範囲を動的に更新する方法
Matplotlibのアニメーション機能を使うと、グラフを描画しながらX軸の表示範囲(xlim)をフレームごとに動的に変更できます。本記事では、FuncAnimationを活用してX軸の値を更新する具体的な手順とサンプルコードを紹介します。
実装の手順
X軸の値をMatplotlibアニメーションで更新するには、以下の手順に従います。
- 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
plt.subplots()を使って、図(figure)とサブプロット(axes)を作成します。- NumPyを使用して、xデータとyデータの点を生成します。
- 軸オブジェクト(ax)の
plot()メソッドでx・yのデータをプロットします。 - フレームごとに呼び出される関数
animateを定義し、その中でset_xlim()によりX軸の範囲を更新します。この関数を繰り返し呼び出すことでアニメーションを実現します。 show()メソッドを使って図を表示します。
サンプルコード
import matplotlib.pylab as plt import matplotlib.animation as animation import numpy as np # 図のサイズとレイアウトの自動調整を設定 plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True fig, ax = plt.subplots() x = np.linspace(0, 15, 100) y = np.sin(x) ax.plot(x, y, lw=7) def animate(frame): # フレーム番号に応じてX軸の右端を更新 ax.set_xlim(left=0, right=frame) ani = animation.FuncAnimation(fig, animate, frames=10) plt.show()
コードの解説
このサンプルでは、0から15までの範囲で100個の等間隔な点を生成し、その正弦波(sinカーブ)を太い線で描画しています。
ポイントとなるのはanimate(frame)関数です。FuncAnimationは引数frames=10に従って0から9までのフレーム番号を順番に生成し、各フレームでanimate関数を呼び出します。関数内のax.set_xlim(left=0, right=frame)により、X軸の右端がフレーム番号に合わせて0→1→2…と拡大していきます。その結果、正弦波のグラフが左から右へ徐々に「開いていく」ようなアニメーション効果が得られます。
なお、アニメーションをGIFやMP4として保存したい場合は、ani.save("animation.gif", writer="pillow")のようにsave()メソッドを利用すると便利です。
実行結果
上記のコードを実行すると、X軸の表示範囲がフレームごとに広がっていくアニメーションが表示されます。


-
【Python】MatplotlibでX軸の値(目盛りラベル)を設定する方法
Python の Matplotlib でグラフの X 軸の値(目盛りラベル)を自由に設定したい場合は、plt.xticks() メソッドを使うのが最も簡単です。以下の手順で実装できます。 X軸の値を設定する手順 x と y のデータポイントを格納する2つのリストを作成します。 range(len(x)) を使って、目盛りの基準となるインデックス(xticks の範囲)を取得します。 plot() メソッドで、インデックスのリストと y データを使って折れ線グラフを描画します。 xticks() メソッドを使い、デフォルトの目盛りを実際の X 軸の値に置き換えます。 show() メソッドで
-
PythonのMatplotlibでX軸に日付をプロットする方法
Pythonで時系列データを可視化する際、X軸に日付を表示したいケースはよくあります。PandasとMatplotlibを組み合わせれば、日付をインデックスとしたデータフレームを作成し、gcf().autofmt_xdate()を使うことでX軸の日付表示を自動的に整形できます。実装の手順日付文字列のリストを作成し、pd.to_datetime()を使ってdatetime型に変換します。プロットするデータとして data = [1, 2, 3] を用意します。DataFrame() オブジェクト(ここではDF)を生成します。DFの value 列に手順2のデータを設定します。手順1で作成したda