paper-figure について
paper-figureは、実験データから論文向けの再現可能なプロットや比較表を作成するスキルです。研究者の図表計画、スクリプト作成、LaTeXへの組み込み、品質確認を支援しますが、概念図や画像グリッドは手作業です。
主な機能
- 01データに基づくプロット生成
- 02LaTeX比較表の作成
- 03マルチパネル図の作成
- 04図ごとの再現可能なスクリプト
- 05レンダリング結果の品質確認
活用シーン
- 01実験のJSONやCSVからプロットを作成
- 02手法比較やアブレーションの図を準備
- 03関連研究比較用のLaTeX表を生成
- 04論文への掲載前に図を確認
MCP 対応
指定されたレビューモデルを使い、Codex MCPで図を確認する手順があります。各レビュー枠の前にレビュールートを解決することも記されています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ wanshuiyin/ auto-claude-code-research-in-sleep --skill paper-figureインストール後、Claude Code で/paper-figureを入力して読み込まれたか確認します。
詳細
論文の図:実験データから出版品質のプロットを作成する
各レビュアー枠の開始前に、選択可能なレビュアーに従ってください: 呼び出しを解決 →
.aris/reviewer.json→ Claude Code のデフォルト(Codex MCP) を、正規のヘルパーリゾルバー経由でreviewer_route.pyによって実行し、この 枠のティア、新鮮なコンテキスト、ソース/画像入力、決定論的なゲートを維持します。 以下の Codex の例/固定設定はbackend=codexにのみ適用されます。それ以外のルートでは、 それぞれ独自の初回呼び出し/返信契約を使用します。ルートと実際に返された ID を保存し、 選択できない場合はREVIEW_UNAVAILABLEとします。実際の ファミリー/完了状況/スコープに基づいて受け入れを分類します。 呼び出し時のレビュアー/モデル/エフォートの上書きを、レビュアーを使用する子に引き継ぎます。 生成ワーカーに変更はありません。
$ARGUMENTSに基づいて、論文のすべての図と表を生成します。
対象範囲:このスキルでできること/できないこと
| カテゴリ | 自動生成できるか | 例 |
|---|---|---|
| データに基づくプロット | ✅ はい | 折れ線グラフ(学習曲線)、棒グラフ(手法の比較)、散布図、ヒートマップ、箱ひげ図/バイオリンプロット |
| 比較表 | ✅ はい | 先行研究の境界値、手法の特徴、アブレーション結果を比較する LaTeX 表 |
| 複数パネルの図 | ✅ はい | 複数のプロットを組み合わせたサブ図グリッド(例:データセット × 手法の 3×3) |
| アーキテクチャ/パイプライン図 | ❌ いいえ — 手動 | モデルアーキテクチャ、データフロー図、システム概要。せいぜい簡単な TikZ の骨組みを生成できますが、draw.io、Figma、TikZ などのツールを使って自分で描く必要があります |
| 生成画像のグリッド | ❌ いいえ — 手動 | 生成サンプルのグリッド(例:GAN/拡散モデルの出力)。これらはこのスキルではなく、モデルを実行して作成します |
| 写真/スクリーンショット | ❌ いいえ — 手動 | 実世界の画像、UI スクリーンショット、定性的な例 |
実際のところ: 一般的な ML 論文では、このスキルで図の約 60%(すべてのデータプロットと表)を作成できます。残りの約 40%(主要図、アーキテクチャ図、定性的な結果)は手動で作成し、/paper-write の実行前に figures/ に配置する必要があります。このスキルはそれらを「既存の図」として検出し、そのまま保持します。
定数
- STYLE =
publication— ビジュアルスタイルのプリセット。選択肢:publication(デフォルト、印刷向けのすっきりしたスタイル)、poster(大きめのフォント)、slide(鮮やかな色) - DPI = 300 — 出力解像度
- FORMAT =
pdf— 出力形式。選択肢:pdf(ベクター、LaTeX に最適)、png(ラスター形式の代替) - COLOR_PALETTE =
tab10— matplotlib のデフォルトのカラーサイクル。選択肢:tab10、Set2、colorblind(第二色覚向け) - FONT_SIZE = 10 — 基本フォントサイズ(一般的なカンファレンスの本文に相当)
- FIG_DIR =
figures/— 生成した図の出力ディレクトリ - REVIEWER_MODEL =
gpt-6-astra— 図の品質レビューに Codex MCP 経由で使用するモデル。
入力
- PAPER_PLAN.md — 図の計画表(
/paper-planで作成) - 実験データ —
figures/またはプロジェクトルートにある JSON ファイル、CSV ファイル、または画面ログ - 既存の図 — 保持する手動作成の図
PAPER_PLAN.md がない場合は、データファイルを検索し、どの図を生成するかユーザーに尋ねます。
ワークフロー
ステップ 1:図の計画を読む
PAPER_PLAN.md から図の計画表を解析します。
| ID | Type | Description | Data Source | Priority |
|----|------|-------------|-------------|----------|
| Fig 1 | Architecture | ... | manual | HIGH |
| Fig 2 | Line plot | ... | figures/exp.json | HIGH |
以下を特定します:
- データから自動生成できる図
- 手動での作成が必要な図(アーキテクチャ図など)
- 比較表(LaTeX として生成)
ステップ 2:プロット環境を設定する
共有スタイル設定スクリプトを作成します。
# paper_plot_style.py — shared across all figure scripts
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams.update({
'font.size': FONT_SIZE,
'font.family': 'serif',
'font.serif': ['Times New Roman', 'Times', 'DejaVu Serif'],
'axes.labelsize': FONT_SIZE,
'axes.titlesize': FONT_SIZE + 1,
'xtick.labelsize': FONT_SIZE - 1,
'ytick.labelsize': FONT_SIZE - 1,
'legend.fontsize': FONT_SIZE - 1,
'figure.dpi': DPI,
'savefig.dpi': DPI,
'savefig.bbox': 'tight',
'savefig.pad_inches': 0.05,
'axes.grid': False,
'axes.spines.top': False,
'axes.spines.right': False,
'text.usetex': False, # set True if LaTeX is available
'mathtext.fontset': 'stix',
})
# Color palette
COLORS = plt.cm.tab10.colors # or Set2, or colorblind-safe
def save_fig(fig, name, fmt=FORMAT):
"""Save figure to FIG_DIR with consistent naming."""
fig.savefig(f'{FIG_DIR}/{name}.{fmt}')
print(f'Saved: {FIG_DIR}/{name}.{fmt}')
ステップ 3:図の種類を自動選択する
データに基づく図には、次の判断ツリーを使用します(Imbad0202/academic-research-skills に着想を得ています)。
| データパターン | 推奨タイプ | サイズ |
|---|---|---|
| X=時間/ステップ、Y=指標 | 折れ線グラフ | 0.48\textwidth |
| 手法 × 1 指標 | 棒グラフ | 0.48\textwidth |
| 手法 × 複数の指標 | グループ化棒グラフ/レーダーチャート | 0.95\textwidth |
| 2 つの連続変数 | 散布図 | 0.48\textwidth |
| 行列/グリッド値 | ヒートマップ | 0.48\textwidth |
| 分布の比較 | 箱ひげ図/バイオリンプロット | 0.48\textwidth |
| 複数データセットの結果 | マルチパネル(サブ図) | 0.95\textwidth |
| 先行研究との比較 | LaTeX 表 | — |
ステップ 4:各図を生成する
計画に含まれる各図について、単独で実行できる Python スクリプトを作成します。
折れ線グラフ(学習曲線、スケーリング):
# gen_fig2_training_curves.py
from paper_plot_style import *
import json
with open('figures/exp_results.json') as f:
data = json.load(f)
fig, ax = plt.subplots(1, 1, figsize=(5, 3.5))
ax.plot(data['steps'], data['fac_loss'], label='Factorized', color=COLORS[0])
ax.plot(data['steps'], data['crf_loss'], label='CRF-LR', color=COLORS[1])
ax.set_xlabel('Training Steps')
ax.set_ylabel('Cross-Entropy Loss')
ax.legend(frameon=False)
save_fig(fig, 'fig2_training_curves')
棒グラフ(比較、アブレーション):
fig, ax = plt.subplots(1, 1, figsize=(5, 3))
methods = ['Baseline', 'Method A', 'Method B', 'Ours']
values = [82.3, 85.1, 86.7, 89.2]
bars = ax.bar(methods, values, color=[COLORS[i] for i in range(len(methods))])
ax.set_ylabel('Accuracy (%)')
# Add value labels on bars
for bar, val in zip(bars, values):
ax.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 0.3,
f'{val:.1f}', ha='center', va='bottom', fontsize=FONT_SIZE-1)
save_fig(fig, 'fig3_comparison')
比較表(理論論文向け LaTeX):
\begin{table}[t]
\centering
\caption{Comparison of estimation error bounds. $n$: sample size, $D$: ambient dim, $d$: latent dim, $K$: subspaces, $n_k$: modes.}
\label{tab:bounds}
\begin{tabular}{lccc}
\toprule
Method & Rate & Depends on $D$? & Multi-modal? \\
\midrule
\citet{MinimaxOkoAS23} & $n^{-s'/D}$ & Yes (curse) & No \\
\citet{ScoreMatchingdistributionrecovery} & $n^{-2/d}$ & No & No \\
\textbf{Ours} & $\sqrt{\sum n_k d_k / n}$ & No & Yes \\
\bottomrule
\end{tabular}
\end{table}
アーキテクチャ/パイプライン図(手動 — このスキルの対象外):
- draw.io、Figma、Keynote、または TikZ を使用して手動で作成する必要があります
- このスキルでは出発点として大まかな TikZ の骨組みを生成できますが、出版品質の結果は期待しないでください
- 図がすでに
figures/に存在する場合は、そのまま保持し、LaTeX の\includegraphicsスニペットのみを生成します - 図の計画と
latex_includes.texでは[MANUAL]として明示します
ステップ 5:すべてのスクリプトを実行する
# Run all figure generation scripts
for script in gen_fig*.py; do
python "$script"
done
すべての出力ファイルが存在し、空でないことを確認します。その後、レンダリングしてから検証します。 各レンダリング済み PDF/PNG を(スクリプトではなく)再度開いて自己チェックします。ラベルが切れていないこと、凡例がデータを覆っていないこと、最終的な印刷サイズですべての数値/ラベルが読めることを確認してください。この自己チェックはステップ 7 のレビュー前に行います。これにより、レビュー担当者の時間を軸の切れの検出ではなく、内容の確認に充てられます。
ステップ 6:LaTeX のインクルードスニペットを生成する
各図について、取り込むための LaTeX コードを出力します。
% === Fig 2: Training Curves ===
\begin{figure}[t]
\centering
\includegraphics[width=0.48\textwidth]{figures/fig2_training_curves.pdf}
\caption{Training curves comparing factorized and CRF-LR denoising.}
\label{fig:training_curves}
\end{figure}
論文に簡単にコピー&ペーストできるよう、すべてのスニペットを figures/latex_includes.tex に保存します。
ステップ 7:REVIEWER_MODEL による図の品質レビュー
図の説明とキャプションを GPT-6-Astra に送信してレビューを依頼します。
まずこのレビュー担当者枠を解決してください。以下は
backend=codexの例です。
mcp__codex__codex:
model: gpt-6-astra
config: {"model_reasoning_effort": "xhigh"}
prompt: |
Review these figure/table plans for a [VENUE] submission.
For each figure:
1. Is the caption informative and self-contained?
2. Does the figure type match the data being shown?
3. Is the comparison fair and clear?
4. Any missing baselines or ablations?
5. Would a different visualization be more effective?
[list all figures with captions and descriptions]
ステップ 8:品質チェックリスト
このチェックリストは二分されています(Anthropic の Claude Science
figure-style スキルに倣ったパターン、Apache-2.0):正確性のルールは常に適用されます — 図が真実を伝えているかどうかに関するもので、美的要素は含まず、どのようなスタイル上の選択もこれらに優先することはできません。ガイダンスのルールはデフォルトです — きれいな結果を生み出しますが、意図を明示した代替案であれば優先できます。
正確性 — 常に適用。描画前にデータと照合して確認してください:
- 除外データを要約に決して含めない — ソースで除外またはフラグ付けされた行は、完全に除外するか、視覚的に明確に区別して描画します(中抜き/ハッチングのマーカー、凡例に明記)。含まれる行と並べて描画する平均値/CIの算出には決して使いません
- キャプションと、主張を含むタイトル文はすべて、描画対象のすべての行に照らして検証する — 1つでもカテゴリが主張と矛盾する場合は、「4つのベンチマークのうち3つで」のように条件を付けるか、記述的な表現に変更します。過大な主張をする図は、どれほど美しく描画されていても誤りです
- 比較可能な条件のみを扱う — N/予算/プロトコルが異なる条件で測定された群を、視覚的に同等なものとして描画しません。分けるか、キャプションで違いを明記します
- nと固定した条件を明記する — 要約マーカーを含むすべてのパネルで、nと反復の単位を記載します(パネルまたはキャプション)
- 描画後に検証する — ステップ5のセルフチェックを、スクリプトではなく実際に描画されたPDF/PNGで行います。ラベルが切れていないこと、凡例がデータに重なっていないこと、最終的な印刷サイズですべての数値/ラベルが読めることを確認します
ガイダンス — 強く推奨されるデフォルト(pedrohcgs/claude-code-my-workflowに基づく)。ただし、意図を明示した代替案であれば優先できます — 以下の「重要なルール」で必須とされる項目を除きます(ベクターPDF出力と図中にタイトルを入れないことは重要なルールです。この2項目は必須として扱い、上書きできません):
- 印刷時の用紙サイズで読みやすいフォントサイズにする(小さすぎないこと)
- グレースケールでも判別できる色にする(印刷に適した配色)
- 図中にタイトルを入れない — タイトルはLaTeXの
\caption{}のみに記載します(pedrohcgsに基づく) - 凡例がデータに重ならない
- 該当する場合、軸ラベルに単位を記載する
- 軸ラベルを出版物の品質にする(
emp_rateのような変数名にしない) - 図の幅を1段組(0.48\textwidth)または全幅(0.95\textwidth)に収める
- PDF出力をベクター形式にする(テキストをラスタライズしない)
- matplotlibのデフォルトタイトルを使用しない(出版用では
plt.titleを削除) - 論文本文のフォントに合うセリフ体フォントを使用する(Times/Computer Modern)
- 色を使用する場合は、色覚多様性に配慮する
出力
figures/
├── paper_plot_style.py # shared style config
├── gen_fig1_architecture.py # per-figure scripts
├── gen_fig2_training_curves.py
├── gen_fig3_comparison.py
├── fig1_architecture.pdf # generated figures
├── fig2_training_curves.pdf
├── fig3_comparison.pdf
├── latex_includes.tex # LaTeX snippets for all figures
└── TABLE_*.tex # standalone table LaTeX files
重要なルール
- すべての図を再現可能にする — 生成スクリプトを出力と一緒に保存します
- データをハードコードしない — 必ずJSON/CSVファイルから読み込みます
- すべてのプロットにベクター形式(PDF)を使用する — PNGは代替手段としてのみ使用します
- 装飾的な要素を入れない — 背景色、3D効果、チャートジャンクは使用しません
- すべての図でスタイルを統一する — フォント、色、線幅を揃えます
- 色覚多様性に配慮した配色にする — 必要に応じて https://davidmathlogic.com/colorblind/ で確認します
- 図ごとにスクリプトを1つ用意する — データ変更時に個別の図を簡単に再実行できます
- 図中にタイトルを入れない — キャプションはLaTeXのみに記載します
- 比較表も図として扱う — 独立した.texファイルとして生成します
図の種類のリファレンス
| 種類 | 用途 | 標準的なサイズ |
|---|---|---|
| 折れ線グラフ | 学習曲線、スケーリング傾向 | 0.48\textwidth |
| 棒グラフ | 手法の比較、アブレーション | 0.48\textwidth |
| グループ化棒グラフ | 複数指標の比較 | 0.95\textwidth |
| 散布図 | 相関分析 | 0.48\textwidth |
| ヒートマップ | アテンション、混同行列 | 0.48\textwidth |
| 箱ひげ図/バイオリンプロット | 分布の比較 | 0.48\textwidth |
| アーキテクチャ図 | システムの概要 | 0.95\textwidth |
| 複数パネル図 | 結果の組み合わせ(サブ図) | 0.95\textwidth |
| 比較表 | 既存の境界と自分たちの境界(理論) | 全幅 |
謝辞
デザインパターン(種類 × スタイルのマトリクス)は、baoyu-skills に着想を得ています。出版スタイルのデフォルト設定と図のルールは、pedrohcgs/claude-code-my-workflow に基づいています。可視化の意思決定ツリーは、Imbad0202/academic-research-skills に基づいています。