matplotlib-pro について
科学者や開発者向けの Matplotlib スキルで、アニメーション、インタラクティブなプロット、論文用図表を扱います。Artist 階層の制御、blitting、バックエンド選択、LaTeX 出力に重点を置いています。
主な機能
- 01Artist 階層の制御
- 02blitting による高速化
- 03インタラクティブウィジェット
- 04LaTeX と PGF の図表
- 05バックエンドの選択
活用シーン
- 01シミュレーションデータのアニメーション化
- 02インタラクティブなプロットツールの作成
- 03学術誌向け図表の準備
- 04センサーデータのリアルタイム表示
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ tondevrel/ scientific-agent-skills --skill matplotlib-proインストール後、Claude Code で/matplotlib-proを入力して読み込まれたか確認します。
詳細
Matplotlib - プロフェッショナルな可視化とアニメーション
静的なプロットにとどまらず、Matplotlibは動的なデータ可視化と科学的なストーリーテリングを実現する強力なエンジンです。このガイドでは、「プロ」向けの機能である、高速化のためのブリッティング、制御性を高めるArtist階層、論文向けのLaTeX連携に焦点を当てます。
使用する場面
- シミュレーション(流体力学、N体問題)向けに高FPSのアニメーションを作成するとき。
- JupyterやGUI内でカスタムのインタラクティブツールを構築するとき。
- 学術誌向けにピクセル単位で正確な図を生成するとき。
- センサーからのリアルタイムデータストリームを可視化するとき。
基本原則
1. Artist階層
目に見えるものはすべてArtistです。FigureにはAxesが含まれ、AxesにはLine、Text、Patchが含まれます。プロレベルの制御とは、高水準のpltコマンドを使うのではなく、これらのオブジェクトを直接操作することです。
2. ブリッティング(高速化の秘訣)
標準的なアニメーションでは、各フレームでFigure全体を再描画するため、処理が遅くなります。ブリッティングでは、Axesやラベルを背景画像としてキャッシュし、変更された部分(たとえば移動する線)だけを再描画します。
3. バックエンドを使いこなす
- Agg:高品質な静的PNG画像向け。
- PDF/PGF:LaTeX向けのベクター形式。
- TkAgg/QtAgg:インタラクティブなウィンドウ向け。
高性能なアニメーション
ブリッティングを使ったFuncAnimation
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
line, = ax.plot([], [], lw=2) # Returns the Line2D artist
def init():
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1, 1)
return line, # Note the comma
def update(frame):
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x + frame/10.0)
line.set_data(x, y)
return line,
# blit=True is critical for performance
ani = FuncAnimation(fig, update, frames=100, init_func=init, blit=True)
plt.show()
出版品質の基準
1. LaTeXとPGFバックエンド(論文向け)
import matplotlib as mpl
mpl.use("pgf") # Use PGF for perfect LaTeX integration
mpl.rcParams.update({
"pgf.texsystem": "pdflatex",
"font.family": "serif",
"text.usetex": True,
"pgf.rcfonts": False,
})
fig.savefig("figure.pgf") # Import this directly into your LaTeX doc
2. 複雑なGridSpecレイアウト
import matplotlib.gridspec as gridspec
fig = plt.figure(constrained_layout=True)
gs = gridspec.GridSpec(3, 3, figure=fig)
ax_main = fig.add_subplot(gs[0:2, :]) # Top 2/3rds
ax_hist_x = fig.add_subplot(gs[2, 0:2]) # Bottom left
ax_hist_y = fig.add_subplot(gs[2, 2]) # Bottom right
インタラクティブウィジェット
カスタムスライダーとボタン
from matplotlib.widgets import Slider
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
line, = ax.plot(x, np.sin(x))
ax_freq = plt.axes([0.25, 0.1, 0.65, 0.03])
slider = Slider(ax_freq, 'Freq', 0.1, 30.0, valinit=1.0)
def update(val):
line.set_ydata(np.sin(slider.val * x))
fig.canvas.draw_idle() # Optimized redraw
slider.on_changed(update)
重要なルール
✅ 推奨事項
- fig.canvas.draw_idle()を使う - イベントループが空いたときだけMatplotlibに再描画させるため、UIの遅延を防げます。
- テキストをベクター化する -
.svgまたは.pdfで保存すると、レポート内でラベルがピクセル化しません。 - アニメーションを閉じる - ノートブックでのメモリリークを防ぐため、
plt.close()を使います。 - ArtistAnimationを使う - すべてのフレームを画像として計算済みの場合、ArtistAnimationはFuncAnimationより高速です。
❌ 非推奨事項
- 高負荷なループ内でplt.pause()を使わない - 非効率なため、アニメーションフレームワークを使います。
- 「インチ」をハードコードしない - 移植性を高めるため、
fig.get_size_inches()を使い、Figureのサイズに合わせて拡大縮小します。 - タイトレイアウトを無視しない - サブプロットの重なりは、よくある「初心者らしい」ミスです。
fig.set_constrained_layout(True)を使います。
Matplotlib Proは、データと洞察をつなぐ架け橋です。ブリッティングエンジンとPGFバックエンドを使いこなせば、科学者は数学的に厳密であるだけでなく、視覚的にも説得力のある動的なエビデンスを作成できます。
コメント
Markdown 対応