論文図
図とは、可視化された議論です。読者がキャプションを読む前に5秒間図を見て、その図が主張することを言える場合にのみ、その図は掲載する価値があります。このスキルのすべては、そのテストに合格するためにあります。
ここでコード化されているスタイルは、S&P、USENIX Security、CCS、NDSSの強い論文が共有するものです。 小型、ベクター、2段組み幅の図。表示項目は少数。直接ラベル。印刷に安全な色。軸を説明するのではなく、重要なポイントを述べるキャプション。
核となる原則
1つの図 = 1つの主張 = キャプションの1つのメッセージ
2つの主張を示す必要がある場合は、2つのパネルまたは2つの図を描いてください。3つのことを示す図は、どれ一つとして伝わりません。
絶対条件
- 図ごとに1つのメッセージ。 キャプションの最初の文がそれを述べ、グラフィックがそれをサポートします。
- 印刷サイズで描く。 1段組みの図は幅3.5インチ(IEEE)、3.33インチ(ACM sigconf)、3.4インチ(USENIX)。大きく描いてLaTeXで縮小しないでください。フォントが7 ptの下限を下回ります。
- ベクター出力(matplotlibから
.pdf)。テキストや線があるものはすべてベクターに。写真やスクリーンショットにのみ300 dpiラスターを使用。 - 印刷サイズでフォントサイズ ≥ 7 pt。軸ラベル8 pt、目盛ラベル7 pt。
- 印刷に安全な色:岡部・伊藤パレット。色だけで区別しない。図はグレースケールでも判読できること(
scripts/check_figure.py --previewで確認)。 - 誤解を招く軸は禁止:棒グラフはゼロから開始。対数軸はラベルを付ける。差を誇張するためにy軸を途中から表示しない。明示的で理由が述べられていない限り、二重y軸は禁止。
- 不確実性を示す:主張が定量的な場合は、信頼区間、誤差範囲、またはキャプション内のnを表示。分母のない点推定値は結果ではありません。
- キャプションは気付くべきことを述べる、次に単位、次にn。色のリストではありません。
- チャートジャンクは禁止:3-D、影、装飾としてのグラデーション、虹色マップ、背景塗りつぶし、データと競合するグリッド線は禁止。
- 再現可能:図を生成したスクリプトが、データファイルまたはシードとともに、リポジトリ内で図の隣に存在すること。誰も再生成できない図は、カメラレディの段階では責任の種です。
ステップ0 — 最初に主張を決める
図が一目で明らかにしなければならない主張を、一文で書きなさい:
「公開エクスプロイトコードは、現在ではアドバイザリよりも早く出現する。30日間のアーティファクト対アドバイザリ比は、4つの時代を通じて0.63から1.83に上昇した。」
「そして」なしでその文を書けないなら、それは2つの図です。
matplotlibに触れる前に、templates/figure-brief.mdを記入してください。2分で完了し、最も一般的な手戻り(美しいが間違った量を示す図)を防ぎます。
ステップ1 — 主張からエンコーディングを選択する
references/encoding-guide.mdを読んでください。簡易版:
| 主張の種類 | エンコーディング | 避けるべきもの |
|---|---|---|
| 分布 / 速さ | CDF(階段状)、バイオリン、箱ひげ、ストリップ | ばらつきのない平均値の棒グラフ |
| ペア比較 | ダンベル、スロープ、ペアの点 | 2つの浮遊棒グラフ |
| 時間経過に伴う構成 | 積層面グラフ、スモールマルチプル | 円グラフ、3-D円グラフ |
| ランキング | ソートされた水平棒グラフ、ドットプロット | 順序なし棒グラフ、虹色 |
| 2変数のトレードオフ | 散布図 + パレートフロンティア | サイズが読めないバブルチャート |
| マトリックス / カバレッジ | 知覚的に一様なマップとセル内値を持つヒートマップ | 値なしの虹色ヒートマップ |
| プロセス / タイムライン | スイムレーン、タイムライン、シーケンス図 | 散文の日付の表 |
| 分類 / 決定 | ラベル付きツリー、セルが埋められたマトリックス | ネストされた箇条書きテキスト |
ステップ2 — 共有スタイルで描く
import sys; sys.path.insert(0, "scripts")
from figure_style import apply_style, new_fig, save, SERIES, panel_label
apply_style() # 8 pt ベース、岡部・伊藤、印刷安全 rcParams
fig, ax = new_fig(3.5, 2.3) # 1段組み、適切なアスペクト比
ax.plot(x, y, color=SERIES[0], label="Pre-AI")
save(fig, "figs/fig1_cdf") # .pdf (LaTeX用) + .png (プレビュー用) を書き出す
スタイルはグローバルに調整し、図ごとには決して行わないでください。1つの論文内でフォントや線の太さが異なる2つの図は、異なる論文のように読まれます。
references/style-spec.md にすべての設定とその理由がリストされています。
ステップ3 — 直接ラベル、キャプションは最後
- 系列名は凡例ボックスではなく、線の終わりかプロット上に配置します。直接ラベルが衝突する場合のみ凡例を使用します(
examples/fig01_cdf.png参照)。 - パネルラベル A、B、C は左上に太字で配置し、キャプションから参照します。
- 軸ラベル:量 + 単位 + スケール(
開示からの日数(対数スケール))。 - 次に、
references/captions.mdを使用してキャプションを書きます。重要なポイント → 軸が示すもの → 単位/n/信頼区間 → 読者が見逃してはならない唯一の注意点。
ステップ4 — 印刷対応にする
- パレット:
scripts/figure_style.pyのSERIES(岡部・伊藤)。連続データ:cividis、決してjetではありません。発散:RdBu_r、意味のあるゼロの周辺のみ。 - 形状でもエンコードする:マーカーと線種も系列によって変化させることで、図がグレースケール印刷や色覚異常の査読者にも耐えられるようにします。
- チェッカーを実行:
python scripts/check_figure.py figs/fig1_cdf.png --preview
サイズ/dpi、色パレット、グレースケールと2型色覚(deuteranopia)の分離を報告し、fig1_cdf_gray.png / fig1_cdf_cvd.png を書き出します。両方を確認してください。
references/accessibility.md で詳細(コントラスト、CVD、代替テキスト)を説明しています。
ステップ5 — エクスポートして組み込む
- 埋め込みTrueTypeフォントを使用してベクターPDFにエクスポート(
pdf.fonttype = 42、既に設定済み)。 - 印刷幅でインクルード:
\includegraphics[width=\columnwidth]{figs/fig1_cdf.pdf}。 - コンパイルされたPDFを100%で確認:7 pt未満のテキストがないか、ラベルのクリップがないか、図の高さが半段を超えていないか(論文の主要な概念図でない限り)。
references/production.mdでLaTeXのインクルード、フォント埋め込み、ファイルレイアウトを説明しています。
ステップ6 — 査読者のように検証する
- 5秒テスト:図だけを誰かに見せる。その人は主張を述べられますか?
- キャプションテスト:最初の文は主張であるべきで、「図3は…を示している」ではありません。
- グレースケールテスト:両方のプレビューが正しく読めるか。
- ズームテスト:コンパイルされたPDFの100%で、すべてのラベルが読めるか。
- 整合性テスト:図の数値が表や本文と一致しているか。軸が途中から始まっていないか。誤差範囲がキャプションで定義されているか。
- 再利用テスト:PNGを削除する。スクリプトはバイト単位で同じものを再生成しますか? そうあるべきです。
表示項目の予算
| 会議体の種類 | 表示項目の総数 | 備考 |
|---|---|---|
| トップ4会議 | 6–10 | 概念図1つ、タイムライン1つ、結果表。すべての項目が本文で参照されていること |
| マガジン | 4–6 | 項目ごとに1つのメッセージ。付録の代わりにサイドバー |
| ジャーナル | 8–12 | より多くの余地があるが、同じルール |
図が本文で主張とともに参照されていない場合(「図5はXを示している」)、削除するか文を書き直してください。
アンチパターン
| アンチパターン | 失敗する理由 |
|---|---|
| 虹色/jetカラーマップ | 知覚的に順序づけられていない。誤解を招く値。グレースケールで読めない |
| 3-Dまたは影付きの棒/円グラフ | 比較を歪める装飾 |
| 3スライスを超える円グラフ | 人間は角度の比較が苦手。ソートされた棒グラフを使用 |
| 二重y軸 | データがサポートしない相関主張を招く。2つのパネルを使用 |
| 棒グラフのy軸を途中から表示 | 差を誇張する。査読者は気づく |
| 6エントリの凡例ボックス | 色のマッチングを強制する。直接ラベルかスモールマルチプルを使用 |
| LaTeXで縮小された小さなテキスト | フォントが7 ptを下回る。図が灰色のノイズになる |
| 色を列挙するキャプション | 「青い線は…を示す」は読者が見えることを超えて何も伝えない |
| 表のスクリーンショット | ベクターでなく、編集可能でなく、アクセス可能でない |
| 表を言い換える図 | 表示項目の無駄。主張をサポートする方を残す |
| ラベルのない対数軸 | 読者は桁をまたいだ傾きを比較できない |
| n / 誤差範囲の欠如 | 不確実性のない点推定値は証拠ではない |
リソースマップ
| ファイル | 用途 |
|---|---|
references/venue-figure-profiles.md | トップ4会議の期待事項、段幅、キャプション/配置ルール |
references/encoding-guide.md | 主張 → チャートマッピング、対数スケール、不確実性、表が勝つ場合 |
references/style-spec.md | 理由付きのすべてのmatplotlib設定。パレットの16進コード |
references/captions.md | キャプションの公式と before/after の例 |
references/accessibility.md | 色覚異常とグレースケールの安全性、コントラスト、代替テキスト |
references/production.md | エクスポート、LaTeXインクルード、フォント、ファイルレイアウト、再現性 |
references/anti-patterns.md | 削除すべきものと、それを示す例 |
scripts/figure_style.py | rcParams、岡部・伊藤パレット、new_fig、save、panel_label |
scripts/check_figure.py | サイズ/dpiチェック、グレースケールと2型色覚プレビュー、パレットレポート |
scripts/make_examples.py | すべてのサンプル図を生成(合成データ) |
examples/ | 参照画像:良い例と悪い例vs良い例のペア |
templates/figure-brief.md | 描画前の1ページの概要 |