publication-figures
実証的な金融・経済学向けの出版品質の図表規約です。matplotlibのスタイル設定、カラーパレット、エクスポート設定、および時系列グラフ、デシル分析、係数プロット、イベント分析など一般的な図表タイプをカバーしています。図表やプロット、ビジュアライゼーションを作成する際に自動的に適用できます。
description の原文を見る
Publication-ready figure conventions for empirical finance and economics. Covers matplotlib styling, color palettes, export settings, and common figure types (time series, decile bars, coefficient plots, event studies). Auto-apply when creating any figure, plot, or visualization.
SKILL.md 本文
出版品質の図表
このリポジトリでは、プロット製作用のツールキットは fintools.figures です。
まず docs/ai/figures.md を読んでから、プロット作成パスを意識的に選択してください:
- リポジトリ作業、Word 校正パック、検証チェック、DataFrame から図表へのスイートには、ネイティブな
fintools.figuresヘルパーを使用します。 - 社内出版スタイルには
style="fins"を、FT スタイルの出力にはstyle="ft"を使用します。 - レガシーなスキルローカル
finance.mplstyle/figutils.pyアセットは、ユーザーが明示的に古いスタンドアロン ヘルパー スタイルを希望するか、パッケージ ワークフロー外のポータブル スニペットが必要な場合にのみ使用します。
FT 検証ギャラリーを再現するには:
python tools/figure_examples.py --style ft --docx --output results/figures
社内スタイル ギャラリーを再現するには:
python tools/figure_examples.py --style fins --docx --output results/figures
生成された PNG/PDF/DOCX/キャプション ファイルは無視される results/figures/ パスに格納されます。メンテナー校正パックやローカル ギャラリー出力をコミットしないでください。
図表を作成する際はいつでもこれらの慣例を適用してください。目標は、Claude が生成するすべての図表がデフォルトで出版品質であること — 手動のクリーンアップは不要です。
レガシー ヘルパー クイックスタート
このリポジトリでは fintools.figures を推奨します。以下のヘルパー アセットは、スタンドアロンまたは明示的にリクエストされたレガシー出版スタイル プロットに対して引き続き利用可能です。
このスキル ディレクトリから finance.mplstyle をプロジェクトにコピーして、以下を実行します:
import matplotlib.pyplot as plt
plt.style.use('path/to/finance.mplstyle')
または、インライン で適用します(ファイルは不要):
import matplotlib.pyplot as plt
plt.rcParams.update({
'font.family': 'serif',
'font.serif': ['Times New Roman', 'STIXGeneral', 'DejaVu Serif'],
'mathtext.fontset': 'stix',
'font.size': 9,
'axes.labelsize': 9,
'xtick.labelsize': 8,
'ytick.labelsize': 8,
'legend.fontsize': 8,
'axes.linewidth': 0.6,
'axes.spines.top': False,
'axes.spines.right': False,
'lines.linewidth': 1.2,
'xtick.direction': 'out',
'ytick.direction': 'out',
'legend.frameon': False,
'figure.dpi': 150,
'savefig.dpi': 600,
'savefig.format': 'pdf',
'pdf.fonttype': 42,
})
デフォルト美学
- フォント: Times New Roman / STIX(セリフ、LaTeX 依存なし)
- スパイン: 下部と左側のみ(上部/右側なし)
- グリッド: デフォルトでオフ
- ティック: 外向き、8pt ラベル
- 色: Okabe-Ito カラーブラインドセーフ パレット(青が最初)
- エクスポート: PDF ベクトル、600 DPI、フォント埋め込み(タイプ 42)
カラー パレット
デフォルト サイクル(Okabe-Ito、カラーブラインドセーフ):
PALETTE = ['#377EB8', '#E41A1C', '#4DAF4A', '#984EA3',
'#FF7F00', '#A65628', '#F781BF', '#999999']
2 系列(ロング vs ショート、トリートメント vs コントロール):
BLUE_RED = ['#377EB8', '#E41A1C']
グレースケール セーフ(印刷品質の保証用):
GRAYSCALE = ['#000000', '#555555', '#999999', '#CCCCCC']
# ラインスタイルと組み合わせる:'-', '--', ':', '-.'
シーケンシャル/ダイバージング カラーマップ: ヒートマップには viridis または cividis(カラーブラインドセーフ)を使用します。ダイバージングには RdBu_r(相関行列)を使用します。
図表サイズ
| コンテキスト | 幅(インチ) | 用途 |
|---|---|---|
| シングル カラム | 3.5 | ほとんどのジャーナル図表 |
| 1.5 カラム | 5.25 | 中程度のパネル |
| ダブル カラム/フル幅 | 7.0 | 広いマルチパネル図表 |
| スライド/プレゼンテーション | 10.0 | Beamer、PowerPoint |
アスペクト比: デフォルトは黄金比(幅 / 1.618)。ヒートマップには square を、時系列には wide(幅 / 2.0)を使用します。
def set_size(width='single', ratio='golden'):
widths = {'single': 3.5, 'onehalf': 5.25, 'double': 7.0, 'slide': 10.0}
ratios = {'golden': 1.618, 'square': 1.0, 'wide': 2.0}
w = widths.get(width, width)
r = ratios.get(ratio, ratio)
return (w, w / r)
実証的ファイナンスの一般的な図表タイプ
時系列
fig, ax = plt.subplots(figsize=set_size('double', 'wide'))
ax.plot(dates, values)
ax.set_xlabel(''); ax.set_ylabel('Return (%)')
- ゼロ リファレンスには
ax.axhline(0, color='grey', linewidth=0.5, zorder=0)を使用 ax.axvspan(start, end, alpha=0.1, color='grey')で NBER 景気後退バンドを追加
累積リターン/資産パス
cumret = (1 + returns).cumprod()
ax.plot(cumret.index, cumret.values)
ax.set_ylabel('Growth of $1')
- 1.0(またはパーセンテージ スケールの場合は 100)から開始
- 長期間の場合、ログ スケールはオプション:
ax.set_yscale('log')
Newey-West CI 付きデシル ポートフォリオ バーチャート
# returns_df: 列 0..9(ポートフォリオ リターン時系列)を持つ DataFrame
plot_portfolio_bars(ax, returns_df, show_ls=True, ls_label='10-1')
# 平均、Newey-West SE(ラグ = floor(T^0.25))、95% CI エラーバーを計算
# ロングショート バーと t 統計量アノテーションを含む
- ポートフォリオ ソート図表には
plot_portfolio_barsを使用 — Newey-West SE を自動的に処理 - ショート レッグ(デシル 1)は赤、ロング レッグ(デシル 10)は緑、ロングショート バーは紫で色分け
- ロングショート バーに t 統計量をアノテーション
CI なしの単純なバー(事前計算された平均)の場合:
plot_decile_bars(ax, means, highlight_extremes=True, spread_label=True)
係数プロット(フォレスト プロット)
ax.errorbar(coefs, range(len(coefs)), xerr=[coefs-ci_lo, ci_hi-coefs],
fmt='o', color='#377EB8', capsize=3, markersize=4)
ax.axvline(0, color='grey', linewidth=0.5, linestyle='--')
ax.set_yticks(range(len(names))); ax.set_yticklabels(names)
イベント スタディ(CAR プロット)
days = range(event_window[0], event_window[1] + 1)
ax.plot(days, car, color='#377EB8')
ax.fill_between(days, ci_lo, ci_hi, alpha=0.2, color='#377EB8')
ax.axvline(0, color='grey', linewidth=0.5, linestyle='--')
ax.axhline(0, color='grey', linewidth=0.5)
ax.set_xlabel('Days Relative to Event'); ax.set_ylabel('CAR (%)')
相関ヒートマップ
import seaborn as sns
mask = np.triu(np.ones_like(corr, dtype=bool), k=1)
sns.heatmap(corr, mask=mask, cmap='RdBu_r', center=0, vmin=-1, vmax=1,
annot=True, fmt='.2f', linewidths=0.5, ax=ax,
cbar_kws={'shrink': 0.8})
マルチパネル図表
fig, axes = plt.subplots(1, 3, figsize=set_size('double', 'wide'))
# パネルにラベルを付ける
for i, ax in enumerate(axes):
ax.text(-0.1, 1.05, f'({chr(97+i)})', transform=ax.transAxes,
fontsize=10, fontweight='bold', va='top')
エクスポート チェックリスト
図表を保存する前に:
- 形式: 論文は PDF(ベクトル)、スライド/ウェブは PNG(300+ DPI)
- フォント埋め込み:
pdf.fonttype = 42(スタイルに既に含まれている) - Bbox:
bbox_inches='tight'でクリップされたラベルを回避 - DPI: 出版は 600、スクリーン プレビューは 150
- サイズ: ターゲット ジャーナルのカラム幅に合わせる — LaTeX/Word でリサイズしない
fig.savefig('figure.pdf', bbox_inches='tight', dpi=600)
# クイック プレビュー用に PNG も保存:
fig.savefig('figure.png', bbox_inches='tight', dpi=150)
ジャーナル固有のオーバーライド
| ジャーナル | オーバーライド |
|---|---|
| RFS | 300 DPI(写真)または 600 DPI(ラインアート)で TIF にエクスポート。フォント:Arial、Courier、Times、Helvetica、Symbol のみ。 |
| AER | シェーディング、グリッドライン、背景色なし。ベクトル PDF/EPS 推奨。表の行見出しを含めて最大 9 カラム幅。 |
| JF | オンラインではカラー図表可(無料)。印刷でのカラーは 1 ページあたり 500 ドルのコスト。グレースケール印刷互換性を考慮して設計。 |
| Nature | サンセリフ フォント必須(Helvetica/Arial)。オーバーライド:plt.rcParams['font.family'] = 'sans-serif' |
禁止事項
- レインボー カラーマップ(
jet、hsv)を使用しない — 知覚的に均一でなく、カラーブラインドセーフではない - 3D プロットを使用しない(データが本当に 3 番目の次元を必要とする場合を除く)
- チャートジャンク追加しない:不要なグリッドライン、境界線、背景色
- LaTeX/Word で図表をスケールしない — matplotlib で正しいサイズを設定し、100% で含める
- 同じ論文内の図表で異なるフォント/サイズを使用しない
- matplotlib テキスト(タイトル、ラベル、アノテーション)で LaTeX エスケープ(
\&、\%、\_)を使用しない — matplotlib のデフォルト テキスト エンジンはバックスラッシュを文字通りにレンダリングします。S\&P 500ではなく、プレーン テキストのS&P 500と書いてください。LaTeX エスケープはplt.rcParams['text.usetex'] = Trueの場合にのみ機能し、完全な LaTeX インストールが必要であり、当社のスタイルではデフォルトで有効になっていません。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- Alexander-M-Dickerson
- ライセンス
- MIT
- 最終更新
- 2026/4/19
Source: https://github.com/Alexander-M-Dickerson/ai-asset-pricing / ライセンス: MIT