Community画像github.com

wxx827/scientific-figures

1219個のすぐに実行可能なmatplotlib生成スクリプト。Times New Romanデザインシステム、メトリック互換フォールバックフォント、PDF埋め込みフォント検証タイポグラフィリンターを備え、論文品質の科学図表を生成します。統計チャート、地理空間マッピング、ML解釈、バイオオミクスなど多分野に対応。

scientific-figures とは?

このスキルは、論文品質の科学図表を生成するための1219個の自己完結型matplotlibスクリプト群(番号0~1218)です。各スクリプトは引数なしで実行でき、合成データを自動生成し、300dpiのPNG画像を`output/`ディレクトリに出力します。一貫したデザインシステム(Times New Romanフォント、薄いダークグレーのスパイン、ミュートされた彩度のパレット、タイトなマルチパネルグリッド)を採用し、高級ジャーナルの図表スタイルを再現します。フォント周りは堅牢で、プロプライエタリなTimes New Romanがなくても、バイト単位で同一のアドバンス幅を持つTinos(SIL OFLライセンス)をフォールバックとして使用し、PDFベースのタイポグラフィ監査ツールで実際の埋め込みフォントを検証します。ユーザーはカタログ(135グループ)から目的の図表を検索し、スクリプトを直接実行するか、実データに適応させることができます。`pubstyle.py`モジュールが共通のスタイル設定を提供し、`plot_data.py`がCSV/Excelファイルからの直接プロットを可能にします。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wxx827/paper-figures-skill/tree/HEAD/.cursor/skills/scientific-figures

Installed? Explore more 画像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Scientific Figures(論文品質)

1219個のすぐに実行可能なmatplotlibジェネレーター(番号0~1218)は、高級ジャーナルの図表美を再現します。Times New Roman全体、薄いダークグレーのスパイン、ミュートされた彩度のパレット、タイトなマルチパネルグリッド、閾値およびメトリック注釈、周辺密度、300dpi出力。

すべてのスクリプトは自己完結型です。引数なしで実行し、独自の合成データを生成し、番号にちなんだ名前でoutput/にPNGを書き込みます。

cd scripts
python fig_threshold_regression.py     # -> output/01_threshold_regression.png

適切な図表を見つける

このファイルを読んでチャート名を探さないでください。カタログは分割されているため、必要なものだけをロードできます。

  1. catalog/INDEX.md を読む — 135グループ、各グループは分野またはチャートファミリーで、番号範囲が付いています。
  2. 該当するグループファイルを1つ読む。各グループは、その範囲内のすべての図表と、それが描画する内容、およびいつ使用するかをリストしています。
  3. 適応する前にそのスクリプトを読む。

チャート名がすでにわかっている場合は、インデックスをスキップしてすべてのグループを検索します。

grep -ril "sankey" catalog/
grep -ril "生存曲線\|kaplan" catalog/

実行前に図表がどのように見えるかを確認するには、reference/thumbs/<number>_<name>.jpg を開きます。1219すべてが縮小されて保存されています。reference/curated/ には、そのうち33個がフル解像度で保存されています。

カタログに該当するものがない場合は、汎用グループ(0-54)から始めてください。分布、相関、回帰、ランキング、構成、時系列を、どの分野でも借用できる形式で提供しています。

フォント:初回実行前に必読

ハウスフェイスはTimes New Romanです。これはプロプライエタリであり、バンドルされていません。代わりにfonts/にはTinos(SIL OFL)が含まれており、バイト単位で同一のアドバンス幅を持つため、実物がマシンにインストールされているかどうかに関係なく、図表のレイアウトは同じになります。出力を信頼する前に、スタックが解決されることを確認します。

cd scripts
python check_typography.py --metrics
#   vs Tinos              identical    (Tinos-Regular.ttf)

matplotlibがDejaVuにフォールバックする場合、set_pub_style()は静かに劣化するのではなくエラーを発生させます — 誤った書体はPNGベースのチェックでは見えません。詳細は fonts/README.md を参照。

要件

matplotlib>=3.6 と numpy はすべての図表に必要です。scipy、pandas、seaborn、scikit-learn、openpyxl、Pillow はライブラリとツールのサブセットに必要です。3.6フロアが重要な理由:グリフごとのフォントフォールバックにより、中国語のラベルが宋体を借用し、数字はTimesのままにできます。

pip install -r requirements.txt

共有スタイル:scripts/pubstyle.py

新しい図表でこれをインポートして美観を一致させます。

from pubstyle import (set_pub_style, PALETTES, savefig, style_axes,
                      panel_title, add_figure_header, header_height,
                      panel_labels_inches)

set_pub_style()                       # rcParamsを一度適用;自分で触れない
fig, axes = ...                       # 図表を構築
panel_title(axes[0], "Drift magnitude over time")

head = header_height(fig, subtitle=True)
fig.tight_layout(rect=[0, 0.03, 1, 1 - head / fig.get_size_inches()[1]])
add_figure_header(fig,
                  "Loop closure removes unbounded drift",   # 結論
                  subtitle="n = 240 trajectories, 8 sequences")
panel_labels_inches(fig, axes)        # (a) (b) (c) を等しいインチオフセットで

savefig(fig, "my_fig.png")            # 300 dpiでoutput/へ

サイズは pubstyle.TYPE_SCALE から取得されるため、これらのヘルパーが代わりに行う場合は fontsize= を渡さないでください。PALETTES の主要パレット: teal_rust、blue_red、greens、earth、div_rdbu、pastel4、zones、および色覚障碍者セーフな cb_* ランプ。matplotlibのデフォルトではなくこれらを再利用してください — これらが図表を高級に見せるものです。

scripts/figkit.py は補完的な構築レイヤーです。ズームインセット、テキストカード、インチベースの軸、ラベル重なり防止配置を提供します。

実データへの適応

データがテーブルの場合、これらのスクリプトから始めないでください。 代わりに正面玄関を使用してください。これにより、デザインシステム全体がファイルに適用されます。

cd scripts
python plot_data.py --data yours.csv --describe    # 何を描画できるか?
python plot_data.py --data yours.csv --kind scatter_fit --x a --y b --group g

14種類のチャート、エンコーディングとデリミタの検出、"1,234" と "12.5%" の数値への変換、中国語の列名に対する自動CJKフォント選択、.xlsx と .csv の両方に対応。

1219のジェネレーターの1つを適応させるには、まずデータがどこにあるかを見つけます。

python plot_data.py --contract fig_threshold_regression.py

スクリプトはこれに関して統一されていません。1219のうち19個は gen_data() 関数にデータを分離しており、299個は最初に読む必要がある他の名前付き関数に保持しており、656個は main() 内でインラインに構築しており、245個は図表自体がモデル(Kaimalスペクトル、Kalmanフィルター、合成顕微鏡シーン)であるため置き換え可能なデータがありません。--contract レポートはどのケースが該当するか、および変更すべき定数を示します。

どれを編集する場合でも、プロッティングコードとスタイリングコードは保持してください。スタイリングが価値のある部分です。matplotlibのデフォルトで書き換えないでください。

美観ルール(これらが高級に見える理由)

  1. 上部と右側のスパインを非表示にする。スパインは細く(0.8)、ダークグレー(#333)、黒ではない。
  2. Times New Roman全体、小サイズ(本文7-9pt、下限6.0pt)、図表タイトル、パネル文字、パネルタイトルにのみボールド。
  3. ミュートされた彩度のパレットペア(ティール/ラスト、ブルー/レッド) — 原色RGBは使用しない。
  4. 可能な限り散布図に周辺密度またはヒストグラムを追加する。
  5. 統計量を丸い白いボックスに細い境界線で注釈。閾値テキストはアクセントカラーで配置。
  6. tight_layout(h_pad, w_pad) を使用した密なマルチパネルグリッド。凡例を共有。
  7. 300dpiで bbox_inches="tight" を使用してエクスポート(savefig が処理)。

DESIGN_SYSTEM.md には、各ルールの背後にある強制された数値が記載されています。

検証

output/ のPNGを開き、リクエストと比較します。パネルが窮屈な場合は figsize または h_pad/w_pad を上げます。色が競合する場合は、単一の PALETTES エントリに切り替えます。

PNGを読んでもどの書体が使用されたかはわかりません。PNGにはフォントメタデータが保存されていないためです。タイポグラフィ監査も実行してください。これはPDFにレンダリングし、レンダラーが埋め込んだフォントを読み取ります。

cd scripts
python check_typography.py              # エラーはゼロである必要があります
python check_figures.py --jobs 8        # すべてを実行、すべてのPNGを監査
python run_all.py --parallel 8          # すべての1219を再構築(約15分)
python run_all.py --range 173-192       # リモートセンシングブロックのみ
python run_all.py --parallel 8 --vector # PNGと並んでPDFを出力、投稿用

関連ドキュメント

  • catalog/INDEX.md — 135グループとその番号範囲。
  • DESIGN_SYSTEM.md — 図表間のビジュアル標準(キャンバスサイズ、パレット、タイプスケール、スペーシング、禁止カラーマップ)。新しい図表を作成するか既存の図表を編集する前に読むこと。
  • WORKFLOW.md — 操作マニュアル:ジェネレーターの選択、実データの差し替え、new_figure.py を使用した新しい図表のひな型作成、品質ゲートの実行。SKILL.md はどの図表かを回答し、WORKFLOW.md は使用方法を回答します。
  • scripts/reference.md — 完全な pubstyle API。
  • fonts/README.md — なぜフォントがここに同梱されているか、どのフォントか、どのライセンスの下か。
  • NUMBER_REGISTRY.md — どの番号範囲が使用済みか。新しい図表は1219から開始。

関連スキル