mcpField
M
matplotlib-pro

matplotlib-pro

github.com/tondevrelデータ・データベース2489 回インストール39 週間前に更新
リポジトリ

matplotlib-pro について

科学者や開発者向けの Matplotlib スキルで、アニメーション、インタラクティブなプロット、論文用図表を扱います。Artist 階層の制御、blitting、バックエンド選択、LaTeX 出力に重点を置いています。

主な機能

  1. 01Artist 階層の制御
  2. 02blitting による高速化
  3. 03インタラクティブウィジェット
  4. 04LaTeX と PGF の図表
  5. 05バックエンドの選択

活用シーン

  1. 01シミュレーションデータのアニメーション化
  2. 02インタラクティブなプロットツールの作成
  3. 03学術誌向け図表の準備
  4. 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バックエンドを使いこなせば、科学者は数学的に厳密であるだけでなく、視覚的にも説得力のある動的なエビデンスを作成できます。

コメント