PythonのMatplotlibで画像を再描画する方法をわかりやすく解説
PythonのMatplotlibを使って画像やグラフをリアルタイムに再描画したい場面は少なくありません。例えば、データが順次更新される様子をアニメーションのように表示したい場合などが挙げられます。本記事では、Matplotlibで図を再描画するための基本的な手順と、実際に動作するサンプルコードを紹介します。
画像を再描画する手順
Matplotlibで図を再描画するには、以下の手順に従います。
rcParamsなどで図のサイズを設定し、サブプロット間および周囲の余白を調整します。plt.figure()で新しい図を作成するか、既存の図をアクティブにします。gca()メソッドを使用して、現在の軸(Axes)を取得します。fig.show()で現在の図を表示します。- 指定した回数(ここでは20回)ループ処理を行い、そのたびにプロットを再描画します。
plot()メソッドを使用して、ランダムなデータポイントを追加でプロットします。fig.canvas.draw()で図を再描画し、plt.pause()で少し間隔を空けます。- 処理が完了したら、
plt.close()で図のウィンドウを閉じます。
サンプルコード
import numpy as np
from matplotlib import pyplot as plt
# 図のサイズとレイアウトの自動調整を設定
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
# 新しい図を作成し、現在の軸を取得
fig = plt.figure()
ax = fig.gca()
fig.show()
# 20回繰り返してランダムな点を追加しながら再描画
for i in range(20):
ax.plot(np.random.randint(1, 5), np.random.randint(1, 5), '*', ms=10)
fig.canvas.draw()
plt.pause(0.1)
# 図のウィンドウを閉じる
plt.close(fig)
実行結果
このコードを実行すると、0.1秒ごとにランダムな位置へ星形(*)のマーカーが次々と追加されていきます。各ループでfig.canvas.draw()によってキャンバスが再描画され、plt.pause(0.1)により描画が画面に反映されるため、あたかもアニメーションのようにデータが逐次プロットされていく様子を確認できます。すべてのループが終了すると、plt.close(fig)によって図のウィンドウが閉じられます。
ポイントのまとめ
リアルタイム描画の鍵となるのは、「描画の更新(draw)」と「イベント処理のための一時停止(pause)」の2つです。fig.canvas.draw()だけでは画面が更新されないことがあるため、必ずplt.pause()を組み合わせるのが実践的なテクニックです。また、より高度なアニメーションが必要な場合は、FuncAnimationクラスの利用も検討するとよいでしょう。
-
PythonのMatplotlibでワッフルチャートを作成する方法を解説
ワッフルチャート(Waffle Chart)は、目標に対する進捗状況を視覚的に表現するのに適した、魅力的なデータ可視化手法です。四角いマスが並ぶ様子がワッフルに似ていることからこの名前が付けられており、構成比や達成率を直感的に伝えられます。Pythonでワッフルチャートを作成するには、pywaffleライブラリを使用します。新しい図を作成する際、または既存の図を有効化する際に、FigureClass=Waffleを指定することで簡単に描画できます。作成手順辞書を使ってPandasのデータフレームを作成します。plt.figure()で新しい図を作成する際に、FigureClass=Waffle
-
【Python】Matplotlibのplt.show()ウィンドウを最大化する方法
概要Matplotlibでグラフを表示すると、デフォルトでは小さなウィンドウが開きます。plt.get_current_fig_manager() と mng.full_screen_toggle() の2つのメソッドを組み合わせることで、plt.show() で表示されるウィンドウを簡単に最大化(全画面表示)できます。手順subplot() メソッドを使い、現在の図にサブプロットを追加します(nrow=1、ncols=1、index=1)。リスト [1, 2, 3] を渡して pie() メソッドを呼び出し、円グラフを作成します。get_current_fig_manager() メソッドで