matplotlib について
matplotlibは、直近のやり取りに含まれるデータをmatplotlibで描画するエージェントスキルです。透明なPNGを生成してMarkdown画像として表示し、Emacsの前景色をグラフのスタイルに使います。
主な機能
- 01コンテキストから描画可能なデータを抽出
- 02matplotlibによるグラフ作成
- 03透明背景の画像生成
- 04Emacsの前景色をスタイルに使用
- 05Markdown画像として出力
活用シーン
- 01会話内のデータを可視化
- 02インライン表示用のグラフ作成
- 03Emacsテーマに合わせたグラフの装飾
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ xenodium/ emacs-skills --skill matplotlibインストール後、Claude Code で/matplotlibを入力して読み込まれたか確認します。
詳細
matplotlib でデータをプロットする
直近のやり取りのコンテキストからデータをプロットし、matplotlib を使用します。背景が透明な PNG 画像を生成し、インラインで表示されるように Markdown 画像として出力します。
プロット方法
- 現在のコンテキストから、プロット可能なデータを抽出または導出します。
- このセッションで以前にプロットした際の Emacs の前景色がまだわからない場合は、問い合わせます。
これにより、emacsclient --eval ' (face-foreground (quote default))'"#eeffff"のような16進カラーコードが返されます。以降のすべてのプロットで同じ色を再利用します。 - その色を使った Python スクリプトを一時ファイルに書き込みます。
uv run --with matplotlibでスクリプトを実行します。- 結果を独立した行に Markdown 画像として出力します。

uv run --with matplotlib /tmp/agent-plot-XXXX.py
Python スクリプトのテンプレート
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10, 6))
fig.patch.set_alpha(0)
ax.set_facecolor('none')
FG = "#eeffff" # from emacsclient query
ax.spines['bottom'].set_color(FG)
ax.spines['left'].set_color(FG)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.tick_params(colors=FG)
ax.xaxis.label.set_color(FG)
ax.yaxis.label.set_color(FG)
ax.title.set_color(FG)
# ... plot commands using the data ...
plt.tight_layout()
plt.savefig("/tmp/agent-plot-XXXX.png", dpi=150, transparent=True)
ルール
- セッションごとに Emacs の前景色を一度だけ問い合わせ、以降のプロットでは再利用します。色がまだわからない場合に限り、再度問い合わせます。
- 背景を透明にするには、必ず
fig.patch.set_alpha(0)とax.set_facecolor('none')を使用します。 savefigでは必ずtransparent=Trueを使用します。- ファイル名には必ずタイムスタンプを使用します(例:
/tmp/agent-plot-$(date +%s).png)。agent-plot-lorenz.pngのような説明的な名前は使用しないでください。 - スクリプトは必ず
uv run --with matplotlibで実行します。pip installは使用しないでください。 - スクリプトが正常に実行されたら、独立した行に Markdown 画像(
)を出力します。 - データに適したプロット形式(折れ線、棒、散布図、ヒストグラム、円、ヒートマップなど)を選びます。
- 明瞭さが増す場合は、タイトル、軸ラベル、凡例を付けます。
- 凡例はテーマに合わせてスタイルを設定します。ダーク背景の場合は
ax.legend(facecolor='#1a1a2e', edgecolor=FG, labelcolor=FG)を使用します。 - 控えめなグリッド線には
ax.grid(True, alpha=0.2, color=FG)を使用します。 - 見た目をすっきりさせるため、上と右のスパインを非表示にします。
- 直近のコンテキストにプロット可能なデータがない場合は、その旨をユーザーに伝えます。
コメント
Markdown 対応