Community影像github.com

wxx827/scientific-figures

1219 個即用型 matplotlib 產生器,用於生成符合期刊出版品質的科學圖表,採用強制 Times New Roman 設計系統,並配備內建字型相容性檢查工具。涵蓋統計圖表、地理空間繪圖、機器學習、生物組學等各領域。

scientific-figures 是什麼?

此技能提供 1219 個編號為 0 至 1218 的獨立 Python 腳本,每個腳本皆能自給自足地產生符合高標準期刊要求的科學圖表。所有圖表均強制使用 Times New Roman 字型(並以 Tinos 作為相容備用字型),並採用統一的設計系統,包括細深色邊框、柔和飽和色板、緊湊的多面板佈局及 300 DPI 輸出。技能核心在於 `scripts/pubstyle.py` 模組,它封裝了所有繪圖樣式設定,避免使用者直接操作 matplotlib 的 rcParams。此外,技能還提供 `plot_data.py` 作為前端工具,能直接從 CSV 或 Excel 檔案產生符合設計規範的圖表,以及 `--contract` 報告功能,協助使用者快速定位腳本中應修改的數據生成部分。支援平台包括任何可執行 Python 3.6 以上版本的環境。

相容平台✓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 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

科學圖表(期刊出版品質)

1219 個即用型 matplotlib 產生器,編號 0-1218,可重現昂貴期刊的圖表美學:全圖使用 Times New Roman、細深色邊框、柔和飽和色板、緊湊的多面板網格、臨界值與指標註記、邊際密度圖及 300 DPI 匯出。

每個腳本都是自包含的。無需參數即可執行,會自行產生合成數據,並將 PNG 圖檔輸出至 output/ 目錄,檔案以編號命名。

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

尋找合適的圖表

請勿透過閱讀此檔案來尋找圖表名稱;目錄已拆分,您只需載入所需部分。

  1. 閱讀 catalog/INDEX.md — 包含 135 個群組,每個群組對應一個學科或圖表家族,並標示其編號範圍。
  2. 閱讀符合需求的群組檔案。每個檔案會列出該範圍內的每個圖表及其繪製內容與使用時機。
  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 授權) 作為替代,其字元前進寬度與 Times New Roman 完全相同,因此無論機器是否安裝真實字型,圖表版面都會一致。在信任任何輸出結果前,請先確認字型堆疊解析正確:

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], "隨時間變化的漂移幅度")

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,
                  "閉環消除了無界漂移",   # 結論
                  subtitle="n = 240 條軌跡,8 個序列")
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

支援十四種圖表類型、編碼與分隔符號自動偵測、將 "1,234" 與 "12.5%" 強制轉換回數值、針對中文欄位名稱自動選擇中日韓 (CJK) 字型,並支援 .xlsx 及 .csv 格式。

若要改編其中一個 1219 個產生器,請先找出其數據所在位置:

python plot_data.py --contract fig_threshold_regression.py

這些腳本的數據組織方式不盡相同。在 1219 個腳本中,19 個將其數據隔離在 gen_data() 函數中,299 個將其保留在需要先閱讀的其他具名函數中,656 個在 main() 內部內聯建構數據,245 個沒有可替換的數據,因為圖表本身就是一個模型 — 例如 Kaimal 頻譜、卡爾曼濾波器或合成顯微鏡場景。--contract 報告會指出屬於哪種情況,並列出值得修改的常數。

無論編輯哪個腳本,請保留繪圖與樣式程式碼。樣式是寶貴的部分;請不要用 matplotlib 預設值重寫它。

美學規則(讓圖表看起來昂貴的要素)

  1. 隱藏上方與右側邊框;保持邊框纖細 (0.8) 且為深灰色 (#333),而非黑色。
  2. 全圖使用 Times New Roman 字型,字級小(內文 7-9 pt,硬性下限 6.0 pt),僅圖表標題、面板字母與面板標題使用粗體。
  3. 使用柔和飽和色板組合(青綠/銹紅、藍/紅)— 絕不使用 RGB 原色。
  4. 在散佈圖上盡量加入邊際密度圖或直方圖。
  5. 將統計數據註記於帶有細邊框的圓角白色方塊內;臨界值文字使用強調色。
  6. 使用 tight_layout(h_pad, w_pad) 製作密集的多面板網格;共用圖例。
  7. 以 300 DPI 匯出,並使用 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 開始編號。

相關技能