論文配圖一鍵生成

👤 SorSor 📦 v2.0.1 ⭐ 4.7 ⬇️ 14.5K 下載
📊 資料分析 免費

📖 技能介紹


name: academic-figures version: 2.0.1 date: 2026-08-13 author: docsor1212 lang: zh description: > Academic-figures 論文配圖一鍵生成:別再為返工改圖發愁。一條命令生成頂刊級論文配圖: 14種圖表(柱狀/散點/熱力/森林/KM/ROC/ 小提琴/組合/流程…)、7套配色(含Okabe-Ito色盲安全)、Nature/Lancet期刊預設, 內建PDF文字重疊+最小字號雙重門禁,匯出前自動攔截拒稿級缺陷。600dpi出版級輸出 PNG/SVG/PDF/TIFF/EPS,純本地執行,資料不出機。中文零配置,告別亂碼。 觸發詞:論文配圖、畫圖、柱狀圖、熱力圖、散點圖、森林圖、KM生存曲線、ROC、 小提琴圖、組合圖、流程圖、SCI配圖、科研繪圖、資料視覺化、期刊配圖、色盲安全。 metadata: clawdbot: emoji: "📊" category: visualization requires: python: ">=3.8" pip: ["matplotlib", "numpy", "pymupdf", "scipy"]


Academic Figures — 論文配圖一鍵生成工具

📊 14種圖表 · 7套配色(含色盲安全) · 零配置中文 · 600dpi出版級輸出 · PDF/TIFF/SVG全支援 純本地執行 · 資料不出本機 · Python一條命令搞定 · 內建校驗+驗證門禁

一條命令,輸出即驗證:

python3 scripts/gen_figure.py -t bar -d data.json -o fig.pdf --theme okabe-ito --verify
# exit 0 = 渲染成功且無真實文字重疊;exit 2 = 檢測到重疊(修復機制,不要交付)

✨ 核心亮點

特性 說明
📊 14種學術圖表 柱狀圖、水平柱狀圖、堆疊柱狀圖、熱力圖、散點圖、折線圖、雙Y軸圖、箱線圖、森林圖、KM生存曲線、ROC曲線、小提琴圖、組合圖、流程圖
🎨 7套配色方案 Okabe-Ito色盲安全(Nature Methods金標準)、GLM科技部落格、cool素雅冷色調、Nature、Lancet、保守學術、通用
📐 期刊預設 --journal nature/lancet --column single/double:官方欄寬(89/183mm)、字號、字型族、600dpi 一鍵應用
🛡️ 資料校驗 18種類型/別名全覆蓋的結構校驗;致命錯誤→exit 1 不落盤,警告→繼續執行
驗證門禁 --verify 畫素級重疊檢查(exit 2);audit_pdf.py 字號門禁(期刊最小字號)
🇨🇳 中文零配置 自動檢測中文字型(含字典鍵、補充平面),徹底告別亂碼,支援中英雙語標籤
📈 統計標註 誤差棒、顯著性標記(p值星號)、趨勢線、置信區間
🔠 斜紋填充 --hatch 一鍵新增黑色斜紋圖案(列印友好,色盲友好)
🔷🔶 黃藍交替 --alternate 單系列柱狀圖逐柱交替黃藍(GLM-5.2部落格風格)
📊 比率標註 --show-ratio 自動計算並標註分組間倍數(如"4.96x")
🌲 增強森林圖 權重氣泡、I²異質性標註、事件數列、分隔線、效應量標籤
📉 KM生存曲線 階梯函式、刪失標記、Log-rank檢驗、風險表、中位生存
📐 ROC曲線 AUC值、95%CI、最優截斷點、多模型對比
🧩 組合圖 多面板A+B+C,每個面板可放任意圖表型別,期刊figure標準佈局
📐 流程圖 架構/流程塊、箭頭、分組標註,CONSORT式研究設計圖
📄 補充圖例 gen_legend.py 用同一資料JSON生成期刊格式圖例("Figure 1
📐 多格式輸出 PNG 600dpi + SVG + PDF + TIFF + EPS
無障礙支援 Okabe-Ito色盲安全配色 + Alt Text撰寫指南

圖表型別

型別 命令 核心功能
柱狀圖 -t bar 分組柱狀圖、誤差棒、顯著性標記、斜紋填充
水平柱狀圖 -t hbar 橫向柱狀圖、比率標註("4.96x")
堆疊柱狀圖 -t stacked_bar 構成比、百分比標籤、總計標註
熱力圖 -t heatmap 單元格標註、自定義色階、colorbar
散點圖 -t scatter 趨勢線、相關係數、分組著色、點標籤
折線圖 -t line 多系列、誤差帶、標記點
雙Y軸圖 -t dual_axis 左右Y軸、實線+虛線、合併圖例
箱線圖 -t box 箱線圖+抖動散點
森林圖 -t forest CI橫線、權重氣泡、總效應菱形、I²、事件數
KM生存曲線 -t km 階梯函式、刪失標記、Log-rank檢驗、風險表、中位生存
ROC曲線 -t roc AUC、95%CI、最優截斷點、多模型對比
小提琴圖 -t violin 密度估計、內建均值/中位線
組合圖 -t composite 多面板A+B+C,每面板任意圖表型別,期刊figure佈局
流程圖 -t diagram 架構/流程塊、箭頭、分組標註,CONSORT式研究設計

快速開始

# 0️⃣ 首次使用:一鍵環境準備(裝依賴/檢測中文字型/清理字型快取/自檢)
python3 scripts/setup_env.py

# 0️⃣ 快速體驗:互動演示(選擇圖表型別 → 內建資料直接出圖)
python3 scripts/gen_figure.py --demo --cjk
# 檢視全部配色:python3 scripts/gen_figure.py --list-themes
# 某圖型限制說明:python3 scripts/gen_figure.py --explain bar

# 1️⃣ 柱狀圖(預設 glm 素雅配色,色盲安全)
python3 scripts/gen_figure.py -t bar -d data.json -o figure.png \
  --title "圖2 主標題 / Subtitle" --ylabel "準確率 Accuracy (%)"

# 水平柱狀圖 + 比率標註 + GLM配色(科技部落格風格)
python3 scripts/gen_figure.py -t hbar -d throughput.json -o perf.png --theme glm \
  --show-ratio --title "吞吐量提升" --xlabel "歸一化吞吐量"

# 柱狀圖 + 斜紋填充(GLM 黃藍斜線招牌風格,列印友好,色盲友好)
python3 scripts/gen_figure.py -t bar -d data.json -o hatch.png --style glm-hatch \
  --show-values --title "ACR50緩解率"

# Meta分析森林圖(PDF輸出)
python3 scripts/gen_figure.py -t forest -d forest.json -o forest.pdf --theme okabe-ito

# Kaplan-Meier生存曲線 + Log-rank檢驗
python3 scripts/gen_figure.py -t km -d survival.json -o km.png --theme okabe-ito \
  --title "圖3 Kaplan-Meier生存曲線" --xlabel "時間 (月)" --ylabel "生存機率"

# ROC曲線 + AUC
python3 scripts/gen_figure.py -t roc -d roc.json -o roc.png --theme okabe-ito \
  --title "圖4 ROC曲線" --xlabel "1 - 特異度" --ylabel "敏感度"

# 堆疊柱狀圖(亞組構成比)
python3 scripts/gen_figure.py -t stacked_bar -d subgroups.json -o stacked.png --theme okabe-ito \
  --title "圖5 ANCA相關血管炎器官受累"

# 雙Y軸圖(臨床評分+實驗室指標)
python3 scripts/gen_figure.py -t dual_axis -d dual.json -o dual.png --theme okabe-ito \
  --title "圖6 CRP與DAS28隨治療變化"

# Nature雙欄投稿:欄寬183mm、7pt Helvetica、最小字號5pt
python3 scripts/gen_figure.py -t bar -d data.json -o nat.pdf --journal nature --column double
python3 scripts/audit_pdf.py nat.pdf --min-size 5          # 字號門禁(nature=5pt)

# 多面板組合圖(Panel A+B+C,期刊figure佈局)
python3 scripts/gen_figure.py -t composite -d composite.json -o figure4.png --theme okabe-ito

# 架構/流程圖(研究設計,CONSORT式)
python3 scripts/gen_figure.py -t diagram -d flow.json -o flow.png --theme glm --width 12 --height 6

# 熱力圖(自定義色階 + 中文)
python3 scripts/gen_figure.py -t heatmap -d data.json -o heatmap.png --cjk \
  --cmap RdBu_r --vmin -20 --vmax 45

# Lancet投稿TIFF格式(照片內容 → 300dpi)
python3 scripts/gen_figure.py -t bar -d data.json -o figure.tiff --dpi 300 --theme lancet

# 補充圖例(期刊格式,同一資料JSON)
python3 scripts/gen_legend.py -d data.json -t "治療應答" -f 1 -o legend.txt

配色方案

預設配色 = glm(素雅莫蘭迪風,色盲安全)——美觀不刺眼,單序列圖表也有暖黃點綴,不單調。

方案 說明 色盲安全
glm ⭐預設 素雅莫蘭迪(鋼藍/暖黃/鼠尾草綠/灰紫/珊瑚)— 美觀+色盲安全,預設首選 ✅ 是
okabe-ito Nature Methods金標準(Wong 2011)— 鮮豔,期刊投稿首選 ✅ 是
cool 素雅冷色調(藏青/海藍/青灰/石板色,色相190-260°) ✅ 是
classic 經典 matplotlib 色板(v2.0 前的舊預設,相容保留)
nature NPG Nature期刊配色
lancet Lancet醫學配色
conservative 保守學術配色

檢視與選擇配色(v2.0.1 新增)

# 終端內直接檢視全部配色(彩色色塊 + 說明)
python3 scripts/gen_figure.py --list-themes

# 生成某套配色的色板預覽圖(可放文件/投稿材料)
python3 scripts/gen_figure.py --theme-swatch glm -o swatch.png

# 便捷別名(記不住全名也能用)
#   okabe → okabe-ito   colorblind → okabe-ito   default/classic → glm
# 大小寫不敏感、自動字首匹配(--theme gla → glm)

⚠️ 投稿建議:期刊投稿用 --theme okabe-ito(Nature、Science、Cell 等主流期刊強制要求色盲友好圖表,紅綠配色是常見退稿原因)。

🎨 日常偏好:非投稿場景(演示、部落格、報告)用預設 glm 即可——素雅柔和、色盲安全、有品牌辨識度。避免大紅大綠大黃配色方案。

GLM 黃藍斜線風格(招牌風格,v2.0.1 新增)

# 一鍵啟用:GLM 素雅莫蘭迪配色 + 黑色斜紋填充
python3 scripts/gen_figure.py -t bar -d data.json -o fig.png --style glm-hatch --cjk

# 等價於 --theme glm --hatch
  • 適合:柱狀圖/水平柱狀圖/堆疊柱狀圖/森林圖(--style glm-hatch 自動作用於這些型別)
  • 優勢:黃藍交替+斜紋,列印/黑白/影印場景依然清晰可辨;色盲安全
  • 更多樣式--alternate 單系列黃藍逐柱交替;--hatch 可搭配任意主題使用

為什麼選 Okabe-Ito?

Okabe-Ito配色是色盲安全學術視覺化的金標準: - Nature Methods專欄明確推薦(Wong 2011, Nat Methods 8:441) - 8種顏色在紅色盲、綠色盲、藍色盲下均可區分 - 視覺鮮明——與傳統配色無審美差距

期刊投稿預設(v2.0)

--journal nature|lancet + --column single|double 自動應用期刊官方欄寬、字號、字型族和DPI。欄寬取自官方作者指南:

期刊 欄位 寬度 字號 最小字號 字型族 DPI
nature 單欄 89mm (3.50in) 7pt 5pt Helvetica 600
nature 雙欄 183mm (7.20in) 7pt 5pt Helvetica 600
lancet 單欄 85mm (3.35in) 8pt 6pt Arial 600
lancet 雙欄 183mm (7.20in) 8pt 6pt Arial 600

高度按主題縱橫比自動計算;顯式 --width/--height 可覆蓋。stderr 會列印預設資訊和對應的 audit_pdf.py --min-size 門禁提示:

python3 scripts/gen_figure.py -t forest -d forest.json -o nat.pdf --journal nature --column double
# stderr: Journal preset: nature (double-column, width=7.20in, font=Helvetica 7pt, min text 5pt
#          — verify with audit_pdf.py --min-size 5)
python3 scripts/audit_pdf.py nat.pdf --min-size 5
# OK: no text below 5pt in nat.pdf

資料校驗與退出碼(v2.0)

每次執行都經過 validate_data(data, chart_type) —— 覆蓋全部 18 種類型/別名分支的結構校驗。兩個嚴重級別:

級別 stderr字首 效果 退出碼
致命 ERROR: 資料不可用(如空系列、系列長度不匹配、缺少必需鍵、ROC AUC超出[0,1]) 1(不落盤)
警告 WARNING: 資料可用但有隱患(如缺少建議鍵) 0
驗證失敗 (來自--verify PDF已渲染但畫素級檢測到文字重疊 2

致命錯誤示例:bar 的 series 長度不一致;box/violin 的 labels 數量 ≠ 組數(見邊界情況);ROC 的 curves[].auc > 1。

驗證與質量門禁(v2.0)

任何可交付圖片必須通過兩道門禁,補充材料再加一道:

1. --verify(內聯,PDF輸出時)

python3 scripts/gen_figure.py -t km -d survival.json -o km.pdf --theme okabe-ito --verify
# 檢測到畫素級文字重疊 → exit 2 + 提示 — 修復機制本身,不要逐圖特判。

2. audit_pdf.py — 字號門禁(期刊最小字號)

python3 scripts/audit_pdf.py figure.pdf --min-size 5 --fail-below
# --fail-below: 存在小於 --min-size 的文本時以非零碼退出
# --max-reports N: 限制違規列表條數(預設20)

3. verify_overlap_pixel.py — 重疊驗證器(交付每個 PDF 前必跑)

python3 scripts/verify_overlap_pixel.py output.pdf
# 輸出 "文本對=N 候選=M 真實重疊=K" — K 必須為 0。

關鍵警告——不要相信 PyMuPDF bbox 相交報告。 PyMuPDF 的 span/char bbox 採用字型行高模型(Noto CJK 2.856em、DejaVu 1.695em),對旋轉文本/豎排標籤系統性高估(45° 時 fs=9 報 32.3pt,真實墨跡僅 16.8pt)。兩個 bbox 相交 ≠ 真實重疊——在本工具的輸出上,此類報告 100% 是假陽性。驗證器用三級流程消除誤報:

  1. 全頁渲染 → 連通分量(網格線/向量圖的大分量被過濾)
  2. 分量質心歸屬到 char bbox
  3. 候選對 600dpi 區域性重渲染 → 最小墨跡距離(> 0.05pt 即判定分離)

防重疊機制已內建於 gen_figure.py(密集柱狀圖 x 軸標籤自動 45° 旋轉、hbar >12 類目字號縮小、_ensure_ylabel_clear() labelpad 自動避讓)。若驗證器報出真實重疊>0,說明圖確實壞了——應修機制,不要逐圖特判。

質量門禁可迴歸測試

倉庫附帶回歸套件,任何改動後都可重新驗證門禁:

python3 tests/run_tests.py          # 50 個 unittest 測試 — 必須全過
# evals/evals.json: 8 個行為評測(退出碼、CJK自動載入、期刊預設、圖例審計…)

補充圖例(v2.0)

禁止圖內圖例的期刊(如Nature)需要單獨的圖例塊。gen_legend.py與出圖相同的資料JSON生成期刊格式圖例("Figure 1 | 標題…"),圖例文字與系列/顏色永遠一致:

python3 scripts/gen_legend.py -d data.json -t "治療應答" -f 1 -o legend.txt
# -d/--data: 與 gen_figure.py 相同的資料JSON   -t/--title: 圖例標題
# -f/--figure: 圖號(預設1)   --type: 圖表型別(預設bar)
# --error-type: 誤差棒描述(預設 "s.e.m.")   -o: 輸出檔案(預設stdout)

中文支援(CJK)

--cjk 自動檢測並載入系統中文字型,零手動配置:

python3 scripts/gen_figure.py -t bar -d data.json -o fig.png --cjk

字型檢測優先順序:Noto Sans CJK → PingFang → Microsoft YaHei → WQY → AR PL → Droid。

自定義字型:--cjk-font /path/to/font.ttf

CJK 自動檢測是遞迴的(v1.6.2+):_scan_cjk() 遍歷整個 data 字典——值和鍵(v2.0),包括巢狀的 composite 面板和 diagram 文本——所以中文系列名(如 "對照組")獨自即可觸發字型載入。檢測覆蓋補充平面(Ext-B..F U+20000–U+2EBEF、Ext-G U+30000–U+3134F)加基本 BMP 區段(v2.0)。

輸出格式

格式 副檔名 DPI 適用場景
PNG .png 600(預設) 通用、簡報
SVG .svg 向量 Web、可編輯圖形
PDF .pdf 向量 期刊投稿首選
TIFF .tiff 600(可 --dpi 300 Nature/Lancet照片要求
EPS .eps 向量 傳統期刊要求

投稿技巧:Nature和Science偏好PDF/EPS向量格式用於線稿。使用 .pdf.eps 副檔名即可。

DPI標準(2026年)

內容型別 所需DPI 用法
線稿(圖表) 600-1000+ 預設600;嚴格期刊用 --dpi 1000
照片/顯微圖 300-600 --dpi 300
混合型 600 預設
向量(PDF/SVG/EPS) 不適用 解析度無關

常用引數

引數 說明
--title "文字" 圖表標題
--xlabel, --ylabel 座標軸標籤
--width N, --height N 圖表尺寸(英寸)
--format F 強制輸出格式:png, svg, pdf, tiff, eps
--dpi N 覆蓋DPI設定
--show-values 柱狀圖顯示數值標籤
--show-ratio 顯示分組間比率標註(如"4.96x")
--ratio-base N 比率計算的基準系列索引(預設0)
--hatch 新增黑色斜紋圖案(列印友好,10種圖案迴圈)
--alternate GLM-5.2部落格風格:單系列柱狀圖逐柱交替使用主題前兩色(配合 --theme glm --hatch 即黃藍交替黑斜線)
--no-trend 隱藏散點趨勢線
--no-legend 隱藏圖例
--cmap NAME 熱力圖色階(預設資料驅動:全正資料自動用 YlOrRd 暖色漸變無斷層;含負值用 RdBu_r 紅藍髮散;顯式指定覆蓋)
--vmin, --vmax 熱力圖數值範圍
--cjk 強制載入中文字型(資料含中文時也會自動檢測)
--cjk-font PATH 自定義中文字型檔案
--journal nature\|lancet 應用期刊預設(欄寬/字號/DPI,見上)
--column single\|double --journal 的欄位佈局(預設雙欄)
--verify 對PDF輸出做畫素級重疊驗證,發現重疊 exit 2

常見問題 FAQ(v2.0.1)

  1. 首次使用報 ModuleNotFoundError? 執行 python3 scripts/setup_env.py 一鍵安裝依賴(matplotlib/numpy/pymupdf/scipy)、檢測中文字型、清理字型快取並自檢。
  2. 中文顯示成方塊/亂碼? 多為字型快取問題:先 python3 scripts/setup_env.py(自動清快取),或手動刪除 ~/.cache/matplotlib 後重跑。需系統已裝中文字型(Linux: fonts-noto-cjk;macOS/Win 系統自帶)。
  3. CSV 資料支援誤差棒嗎? 不支援——CSV 只有標籤+數值列。誤差棒/顯著性標註需用 JSON 的 errors/significance 欄位。觸發時報錯會附帶此提示。
  4. 如何快速看全部配色? python3 scripts/gen_figure.py --list-themes(終端內彩色色塊)或 --theme-swatch glm -o swatch.png 生成色板圖。
  5. 記不住主題全名? 別名可用:okabe/colorblind→okabe-ito,default/classic→glm;大小寫不敏感,支援字首匹配(--theme gla → glm)。
  6. 如何快速上手? python3 scripts/gen_figure.py --demo --cjk 互動式選擇圖表型別直接出圖;--explain <型別> 檢視該型別的限制與推薦用法。

邊界情況(v2.0,來自迴歸測試)

  1. Box/Violin 的 labels = 組名。 labels系列/組數校驗,不是按數值個數。{"labels": ["A","B"], "series": [[..],[..]]} 正確;逐值標籤列表會校驗失敗。
  2. ROC AUC 逐條曲線檢查邊界。 curves[].auc 必須在 [0,1];檢查覆蓋每條模型曲線,不只看頂層 auc
  3. 組合圖圖例絕不重複句點。 圖例文字恰好以一個 . 結尾(_fmt_n 格式化器自帶句點——不再追加)。
  4. 字典鍵中的中文。 series/groups 中的中文鍵通過鍵掃描觸發 CJK 字型載入;否則系列標籤在圖例中渲染成方塊亂碼。
  5. CJK 補充平面。 極罕見的中文表意文字在 Ext-B..G 區段(如 㐀、𠀀)也能檢測;釋出前用 detect_cjk_font.py 驗證字形覆蓋。

♿ 無障礙 & Alt Text

投稿時需為每個圖表提供Alt Text描述。示例:

"柱狀圖顯示治療組(均值75,標準差3)與對照組(均值68,標準差2)的比較。誤差棒表示標準差。星號表示統計學顯著性(p < 0.001)。"

7w4.net小蔥技能站收錄全網優質技能,值得收藏。

Springer Nature、NSF等主要出版商均要求Alt Text以符合無障礙標準。

資料輸入

JSON(完整功能)或 CSV(基礎功能)。詳見 references/data-formats.md

JSON柱狀圖示例:

{
  "labels": ["對照組", "實驗組"],
  "series": {"治療前": [75, 82], "治療後": [68, 70]},
  "errors": {"治療前": [3, 2], "治療後": [2, 1]},
  "significance": {"治療前:0": "***", "治療後:1": "NS"}
}

KM生存曲線示例:

{
  "groups": {
    "治療組": [[12,1],[24,1],[36,0],[48,1],[60,0],[72,0]],
    "對照組": [[6,1],[10,1],[18,1],[30,1],[42,0],[48,1]]
  },
  "log_rank": {"p": 0.032, "method": "Log-rank"},
  "risk_table": {
    "times": [0, 12, 24, 36, 48],
    "治療組": [50, 42, 35, 28, 20],
    "對照組": [50, 38, 25, 15, 8]
  }
}

ROC曲線示例:

{
  "fpr": [0.0, 0.05, 0.10, 0.15, 0.30, 0.50, 1.0],
  "tpr": [0.0, 0.45, 0.68, 0.82, 0.92, 0.96, 1.0],
  "auc": 0.912,
  "ci": {"low": 0.854, "high": 0.958},
  "cutoff": {"fpr": 0.15, "tpr": 0.88, "threshold": 2.35}
}

Agent 用 Python 出圖時(非CLI)

若通過 Python 指令碼而非 CLI 出圖:

  1. 任何標籤可能含中文時,先呼叫 detect_cjk_font()
  2. 所有含中文的文本呼叫都使用 fontproperties=font_prop
  3. 設定 plt.rcParams['axes.unicode_minus'] = False(防止負號變方框)
  4. 多類別圖使用 Okabe-Ito 配色
  5. 驗證輸出:多標籤圖檔案 >20KB 說明字型已載入
  6. 首選輸出:投稿用 PDF,預覽用 600 DPI PNG
  7. 斜紋偏好:使用者偏愛斜紋/條紋柱狀圖(--hatch),列印友好且系列可區分。斜紋線為黑色edgecolor='black')。斜紋啟用時不要手動覆蓋 edgecolor——由 gen_bar 處理。
  8. 強制白底:本工具面向期刊投稿。所有輸出必須白底(facecolor='white')。深色/黑色背景永不接受。不要新增深色主題或深色背景選項。
  9. 校驗:渲染前執行 validate_data(data, chart_type) 並檢查致命資訊(與CLI同一套門禁)。
  10. 驗證:交付任何 PDF 前執行 verify_overlap_pixel.py

設計原則

  1. 白底不可妥協。 本技能面向期刊投稿(Nature、Lancet、Science)。save_kwargs["facecolor"] 硬編碼為 'white'。永不新增深色主題支援。
  2. 斜紋 = 彩色填充上的黑線。 --hatch 啟用時斜紋線為黑色,保證任何填充色上都可見,無需深色背景。每個系列迴圈不同圖案以便黑白列印區分。
  3. glm 為預設,okabe-ito 用於投稿。 預設主題為 glm(素雅、色盲安全)。期刊投稿始終推薦 --theme okabe-ito 保證色盲安全。cool 適合全冷色調內容。

CJK 陷阱

  1. CJK 字型可能缺少 Unicode 上下標。 (U+2079)、³ (U+00B3)、² (U+00B2) 常觸發 Noto Sans CJK 的 "Glyph X missing" 警告。改用純文本寫法:10^9/L 代替 ×10⁹/L。釋出前用 detect_cjk_font.py 檢查字形覆蓋。
  2. 醫院LIS系統的中文化驗單PDF文本佈局非標準。 page.find_tables() 通常返回0個表格。page.get_text() 得到列混合文本(表頭行與資料行交錯)而非按行對齊。6行一條的線性解析器會失敗。可靠方案:提取全文塊 → 按指標專用正則模式匹配(見 references/chinese-lab-report-extraction.md)。

流程圖陷阱

  1. 塊顏色絕不使用 #FFFFFF —— 白塊在強制白底上不可見。用主題配色或任何可見十六進位制色。
  2. 同一軸線上兩個相連塊之間不要放中間塊 —— 箭頭路由演算法按中心座標選最近邊。夾在垂直相連兩塊之間的塊會導致箭頭連錯目標。改為把旁註併入目標塊的 sublabel
  3. CONSORT式排除框應從主垂直流程水平偏移(同Y不同X),用水平箭頭連線。

負向觸發(不要為本技能觸發)

  • SVG醫學示意圖(→ medical-svg)
  • 終端/CLI圖表(→ data-viz)
  • 頻譜圖/時頻分析(→ pywayne-plot)
  • HTML幻燈片演示(→ html-presentation-restyler)
  • 純資料分析不含視覺化(→ data-analysis)

檔案結構

academic-figures/
├── SKILL.md                 ← 英文文件
├── SKILL_ZH.md              ← 中文文件(本檔案)
├── scripts/
│   ├── gen_figure.py        ← 主生成器(matplotlib+numpy)
│   ├── gen_legend.py        ← 補充圖例生成器(期刊格式,v2.0)
│   ├── audit_pdf.py         ← 字號審計器(--min-size 門禁,v2.0)
│   ├── detect_cjk_font.py   ← CJK字型自動檢測器
│   ├── verify_overlap_pixel.py ← 畫素級標籤重疊驗證器(每個PDF交付前必跑)
│   └── extract_lab_pdf.py   ← 中文醫院化驗單PDF → JSON提取器
├── tests/
│   └── run_tests.py         ← 50個unittest迴歸測試(v2.0)
├── evals/
│   └── evals.json           ← 8個行為評測(退出碼、CJK、期刊預設,v2.0)
└── references/
    ├── data-formats.md      ← 各圖表型別JSON/CSV schema
    ├── pitfalls.md          ← 常見錯誤和白底規則
    ├── reverse-engineering-colors.md  ← 從參考圖提取精確顏色
    └── chinese-lab-report-extraction.md ← 解析非標準LIS PDF技術

版本歷史

  • v2.0.1 (2026-08-13) — 使用者體驗最佳化(基於 SkillHub 官方評測 T5.0/R4.5/A4.4/C4.8/E4.6 的失分點):
  • 預設配色改為 glm(素雅莫蘭迪、色盲安全;舊 default 改名 classic 相容保留)。
  • 新增 --list-themes(終端彩色色塊一覽 7 套配色)、--theme-swatch <主題> -o out.png(色板預覽圖)、--style glm-hatch(GLM 黃藍斜線招牌風格一鍵預設)、--demo(互動演示選單,內建 12 類示例資料)、--explain <型別>(限制條件說明)、主題別名+大小寫/字首容錯(okabe/colorblind/glm-blog/default→glm)。
  • --hatch 擴充套件支援 stacked_bar 與 forest(overall 菱形斜紋)。
  • 熱力圖預設色階修復--cmap 未指定時預設 RdBu_r(紅藍髮散,正紅負藍)——此前因 kwargs 預設值失效,熱力圖實際渲染為 matplotlib 預設 viridis(黃綠色);顯式 --cmap 仍可覆蓋。
  • 熱力圖色階資料驅動(v2.0.1 追加):全正資料自動改用 YlOrRd 暖色單漸變(消除 RdBu_r 白色中點導致的低值單元格"斷層"感);含負值才用 RdBu_r 紅藍髮散;vmin/vmax 跟隨資料範圍。迴歸測試 ×2 鎖定。
  • CSV+誤差棒等已知限制的錯誤提示附帶解決方案(HINT)。
  • 新增 scripts/setup_env.py 一鍵環境準備(依賴安裝/中文字型檢測/字型快取清理/自檢)。
  • 新增 examples/ 目錄:5 個示例資料 JSON + 7 套配色 swatch 預覽 + README。
  • 文件新增 FAQ 章節(字型快取/依賴/CSV 限制/配色速查)。
  • v2.0.0 (2026-08-12) — 加固版本:資料校驗層、期刊預設、驗證工具鏈、迴歸/評測套件。
  • validate_data():覆蓋全部 18 種類型/別名分支的結構校驗,main() 集中呼叫;致命 → ERROR: + exit 1(不落盤),警告 → WARNING:(繼續)。示例:空系列、長度不匹配系列、box/violin labels≠組數、缺少必需鍵、ROC curves[].auc 超出 [0,1]。
  • --journal nature|lancet + --column single|double:官方欄寬(nature 89/183mm,lancet 85/183mm)、字號(7/8pt)、字型族(Helvetica/Arial)、600dpi。
  • --verify:PDF 輸出內聯畫素級重疊檢查,真實重疊 exit 2。
  • scripts/audit_pdf.py:字號審計,--min-size/--fail-below/--max-reports — 期刊最小字號門禁(nature 5pt,lancet 6pt)。
  • scripts/gen_legend.py:從同一資料JSON生成期刊格式補充圖例。
  • legend_audit():Python API 誤用導致的空圖例檢測。
  • Bug修復:box/violin labels 按組名校驗(系列數而非值數);ROC AUC 逐條曲線檢查邊界;has_cjk() 擴充套件到補充平面(Ext-B..F U+20000–U+2EBEF、Ext-G U+30000–U+3134F);組合圖圖例重複句點移除;_scan_cjk() 現在也掃描字典(中文系列名觸發字型載入)。
  • tests/run_tests.py:50個unittest測試(14圖型CLI冒煙 + validate_data單元 + CSV邊界 + CJK + 圖例審計 + PDF審計 + 圖例生成)。
  • evals/evals.json:8個行為評測,每個都對照真實CLI行為驗證(退出碼、CJK自動載入、nature雙欄=183mm、圖例審計不誤報、CSV長格式、box組標籤、KM圖例格式)。
  • v1.6.6 (2026-08-12) — 散點圖可讀性修復:(1) gen_scatter 現在渲染 data["labels"] 點標籤(每個 x/y 點一個,上下交替偏移且偏移隨索引增長,防止 1950/1953/1955 這類聚集點標籤碰撞);(2) 趨勢線加 label='Linear trend',圖例會說明虛線是線性迴歸線(此前虛線無任何標註,讀者無法理解)。demo3 以完整標註重建(標題、雙軸標籤、點標籤、圖例)——驗證 0 處真實重疊。
  • v1.6.5 (2026-08-12) — 文件補強:交付 PDF 前必須執行畫素級重疊驗證器。SKILL.md/SKILL_ZH.md 新增"輸出驗證"章節(三級驗證器用法 + 明確警告 PyMuPDF bbox 相交是行高模型產物,在本工具輸出上 100% 為假陽性),檔案結構文件補入 verify_overlap_pixel.pyrequires pip 列表補入 pymupdf/scipy(驗證器依賴)。demo 圖改用真實資料重新生成(demo2 = KEGG 通路基因數、demo3 = ChEMBL pchembl 值)——此前 demo 資料集含退化合成值(基因數全 50 / max_phase 全 4.0),導致座標軸被壓縮成誤導性密集刻度。
  • v1.6.4 (2026-08-12) — 驗證器修復:confirm_min_dist 三級歸屬改為"唯一歸屬"(分量質心同時落入雙方候選窗時歸屬距 origin 更近者),消除旋轉 y 軸標籤場景的假陽性(scatter 的 (max phase) 標籤 × 頂部刻度 4.00——此前報告的"重疊"是驗證器交叉歸屬所致,並非真實墨跡接觸)。重驗全部 14 張生產圖 + 4 張 demo:0 處真實重疊gen_figure.py 新增 _ensure_ylabel_clear() 安全網(matplotlib 實測 bbox 與刻度真實衝突時自動增大 y 軸 labelpad;無衝突時惰性不觸發,當前全部圖形均未觸發)。
  • v1.6.3 (2026-08-12) — 標籤重疊問題畫素級驗證閉環。所有"重疊"報告的根因:PyMuPDF 的 span/char bbox 採用字型行高模型(Noto CJK 2.856em、DejaVu 1.695em),對旋轉文本系統性高估(45° 時 fs=9 報 32.3pt,真實墨跡僅 16.8pt),對豎排/堆疊標籤的行 bbox 也覆蓋整行行高。用三級畫素驗證器(連通分量 → 分量質心歸屬 → 600dpi 最小墨跡距離)驗證全部 14 張生產圖:0 處真實墨跡重疊。matplotlib get_window_extent(20.9pt vs 真實 16.8pt)略保守,防重疊機制本身正確無需改動。驗證器歸檔於 scripts/verify_overlap_pixel.py;移除 gen_figure.py 中死匯入 math
  • v1.6.2 (2026-08-11) — 修復兩個生產環境發現的質量問題。(1) CJK 檢測改為遞迴:_text_has_cjk() 會掃描整個 data 字典(含巢狀的 composite 面板/diagram 文本),composite 面板內的中文標題現在能正確觸發 Noto Sans CJK 字型載入(此前渲染成方框亂碼)。(2) 標籤自動防重疊:bar 圖 x 軸標籤 >8 個或標籤 >12 字元、line 圖 >10 個點、heatmap 列 >6 個或 >14 字元時自動旋轉 45°;hbar 類別 >12 個時 y 軸標籤字號縮小 1pt;composite 面板將 alternate 透傳給 hbar 子圖。
  • v1.6.1 (2026-08-07) — GLM 主題黃色提亮:#D49356#D79D55(GLM-5.2 部落格原圖 14.3 萬黃色畫素的真實均值;此前取到了分佈中偏暗的樣本)。所有交替風格柱狀圖現使用更亮的暖黃色
  • v1.6.0 (2026-08-07) — 新增 --alternate 引數:GLM-5.2部落格風格黃藍交替柱狀圖。單系列 bar/hbar 圖逐柱交替使用主題前兩色(glm 主題下為黃 #D79D55 / 藍 #70A0D0),配合 --hatch 即復現部落格的"黃藍交替+黑色斜線"樣式;也可與 cool/okabe-ito 等主題組合使用
  • v1.5.2 (2026-08-12) — 新增 cool 主題:8色冷色調配色(藏青 #1B4965、海藍 #2E6F9E、天藍 #4FA3C5、深青 #3D8080、中青 #62A0A8、鋼藍 #5B7BA0、石板 #7B9AB5、淺鋼藍 #9DB5CC),色相全在190-260°,色盲安全。因使用者拒絕暖/飽和配色並需求素雅冷色調而建立。
  • v1.5.1 (2026-06-18) — Bug修復:gen_km()median_survivalnull(中位生存未達到)時崩潰;gen_scatter()groups 陣列長度超過 x/y 長度(composite面板)時崩潰。均已用 null/長度守衛修復。新增 cool 主題(藏青/海藍/青灰/石板冷色調,色盲安全)。見 references/pitfalls.md
  • v1.5.0 (2026-06-17) — 新增3種圖表:水平柱狀圖(hbar,含比率標註"4.96x")、多面板組合圖(composite,GridSpec佈局,每面板任意圖表型別)、架構/流程圖(diagram,色塊+箭頭+分組標註);新增GLM配色方案(GLM-5.2畫素提取柔和配色:#70A0D0藍+#D79D55黃,取原影像素均值);新增斜紋填充功能(--hatch,黑色線條,9種圖案,列印友好);新增 --hatch--show-ratio--ratio-base--horizontal CLI引數;強制白底輸出(出版標準)
  • v1.4.0 (2026-05-17) — 新增4種圖表:Kaplan-Meier生存曲線(Log-rank檢驗、風險表、中位生存、刪失標記)、ROC曲線(AUC、95%CI、最優截斷點、多模型對比)、堆疊柱狀圖(構成比、百分比標籤)、雙Y軸折線圖(臨床評分+實驗室指標同圖展示);擴充套件資料校驗
  • v1.3.0 (2026-05-17) — 新增Okabe-Ito色盲安全配色(Nature Methods金標準);DPI升級300→600線稿預設;新增PDF/TIFF/EPS輸出;增強森林圖(權重氣泡、I²異質性、事件數列、分隔線);無障礙Alt Text指南;智慧DPI分場景
  • v1.2.0 (2026-05-16) — 新增版本後設資料、依賴宣告、負觸發詞、檔案結構文件
  • v1.1.0 — 新增中文自動檢測、CSV長格式自動轉換、空資料校驗
  • v1.0.0 — 初始版本:7種圖表、4套配色、中文支援、統計標註

🤖 AI 評測

這個 Skill 質量很不錯,提供了14種學術圖表模板和7套專業配色方案,支援中文標籤和600dpi高解析度輸出,能自動檢查圖表缺陷。適合需要發表論文或做科研彙報的使用者。功能很全面,但部分圖表需要了解統計學知識才能正確使用,中文文件可以更精簡一些。總體來說,這是一個功能強大、細節考慮周到的科研繪圖工具。

📊 多維度評分

適應性4.5
規範性4.7
有效性4.8
可靠性4.6
可信度5

📁 包含檔案 (31 個)

📄 SKILL.md 33.7 KB
📄 SKILL_ZH.md 33.7 KB
📄 evals/evals.json 7.3 KB
📄 examples/README.md 1.7 KB
📄 examples/example_bar.json 184 B
📄 examples/example_box.json 177 B
📄 examples/example_composite.json 291 B
📄 examples/example_diagram.json 397 B
📄 examples/example_dual.json 149 B
📄 examples/example_forest.json 381 B
📄 examples/example_heatmap.json 425 B
📄 examples/example_km.json 190 B
📄 examples/example_line.json 269 B
📄 examples/example_roc.json 280 B
📄 examples/example_scatter.json 206 B
📄 examples/example_stacked.json 184 B
📄 references/chinese-lab-report-extraction.md 4.3 KB
📄 references/clinical-lab-trends.md 3.9 KB
📄 references/composite-layouts.md 4.8 KB
📄 references/data-formats.md 13.1 KB
📄 references/pitfalls.md 7.7 KB
📄 references/reverse-engineering-colors.md 3 KB
📄 references/v1.5-upgrade-analysis.md 4.4 KB
📄 scripts/audit_pdf.py 2.6 KB
📄 scripts/detect_cjk_font.py 1.8 KB
📄 scripts/extract_lab_pdf.py 4.6 KB
📄 scripts/gen_figure.py 107.5 KB
📄 scripts/gen_legend.py 8.2 KB
📄 scripts/setup_env.py 3 KB
📄 scripts/verify_overlap_pixel.py 7.4 KB
📄 tests/run_tests.py 33.3 KB