論文圖表
一張圖表就是一個可視化的論點。它在讀者未閱讀圖說之前,只花五秒鐘就能說出其所傳達的論點時,才算真正發揮價值。本技能中的一切皆服務於這個測試。
它所編碼的風格是 S&P、USENIX Security、CCS 和 NDSS 等頂尖論文共同的風格:小型、向量、兩欄寬度的圖表;少數的展示項目;直接標籤;印刷安全色彩;以及陳述結論而非僅描述座標軸的圖說。
核心原則
一張圖表 = 一個論點 = 圖說中的一個訊息。
如果需要展示兩個論點,請繪製兩個子圖或兩張圖表。一張展示三件事的圖表,最終會讓讀者什麼都記不住。
不可妥協的事項
- 每張圖表一個訊息。 圖說的第一句話就陳述它;圖形則支援它。
- 以印刷尺寸繪製。 單欄圖表寬度:IEEE 為 3.5 英寸,ACM sigconf 為 3.33 英寸,USENIX 為 3.4 英寸。切勿畫得很大然後在 LaTeX 中縮小:這會使字型縮小到低於 7 pt 的下限。
- 向量輸出(來自 matplotlib 的
.pdf)用於任何包含文字或線條的內容。只有照片和螢幕截圖才使用 300 dpi 的點陣圖。 - 印刷尺寸下字型 ≥ 7 pt;軸標籤 8 pt,刻度標籤 7 pt。
- 印刷安全色彩:Okabe–Ito 調色盤,不單靠顏色區分事物,且圖表必須能在灰階下存活(
scripts/check_figure.py --preview)。 - 無誤導性座標軸:長條圖從零開始;對數刻度需標示;勿截斷 Y 軸以誇大差異;除非有明確陳述的理由,否則勿使用雙 Y 軸。
- 顯示不確定性:若論點是量化的,則需顯示信賴區間帶、誤差條或在圖說中說明樣本數。沒有分母的點估計不是一個結果。
- 圖說應陳述要注意的重點,然後是單位,接著是樣本數。它不是一個顏色列表。
- 無圖表垃圾:無 3D、無陰影、無裝飾性漸層、無彩虹圖、無背景填色、無與數據競爭的網格線。
- 可重現:產生該圖表的腳本應與資料檔或種子碼一起存放在儲存庫中。一張無法重現的圖表在最終稿件階段會成為一個負債。
步驟 0 — 先決定論點
用文字寫下一句話,而這句話必須讓圖表本身不言自明:
「公開漏洞利用程式碼現在出現得比安全公告還快:在四個時期中,30 天內從成品到公告的比率從 0.63 上升到 1.83。」
如果你無法在不使用「和」的情況下寫出那句話,你就需要兩張圖表。
在觸碰 matplotlib 之前,先填寫 templates/figure-brief.md。這只需要兩分鐘,但能防止最常見的重做:一個美麗卻展示錯誤數量的圖表。
步驟 1 — 根據論點選擇編碼
閱讀 references/encoding-guide.md。簡短版本:
| 論點類型 | 編碼 | 應避免 |
|---|---|---|
| 分佈 / 速度 | CDF(階梯圖)、小提琴圖、箱線圖、散點條狀圖 | 僅顯示平均值而無離散度的長條圖 |
| 配對比較 | 啞鈴圖、斜率圖、配對點圖 | 兩個浮動長條 |
| 隨時間的組成變化 | 堆疊面積圖、小型多組圖 | 圓餅圖、3D 圓餅圖 |
| 排名 | 排序的水平長條圖、點圖 | 未排序的長條圖、彩虹色 |
| 雙變數權衡 | 散點圖 + 帕雷托前緣 | 泡泡圖(尺寸難以判讀) |
| 矩陣 / 覆蓋率 | 熱力圖(使用感知均勻的色圖)+ 儲存格內數值 | 彩虹色熱力圖(無數值) |
| 流程 / 時間軸 | 泳道圖、時間軸、序列圖 | 以散文形式呈現的日期表格 |
| 分類 / 決策 | 標籤樹、已填充儲存格的矩陣 | 巢狀項目符號文字 |
步驟 2 — 使用共享樣式繪製
import sys; sys.path.insert(0, "scripts")
from figure_style import apply_style, new_fig, save, SERIES, panel_label
apply_style() # 8 pt 基底、Okabe–Ito、印刷安全的 rcParams
fig, ax = new_fig(3.5, 2.3) # 單欄,正確比例
ax.plot(x, y, color=SERIES[0], label="Pre-AI")
save(fig, "figs/fig1_cdf") # 寫入 .pdf(用於 LaTeX)和 .png(預覽)
全域地調整樣式,切勿逐圖調整:同一篇論文中兩張使用不同字型或線寬的圖表,看起來會像來自兩篇不同的論文。
references/style-spec.md 列出了每一項設定及其設定原因。
步驟 3 — 直接標註,最後寫圖說
- 將系列名稱放在其線條的末端,或直接放在圖上,而不是放在圖例框中。僅在直接標籤會互相衝突時才使用圖例(參見
examples/fig01_cdf.png)。 - 面板標籤 A、B、C 以粗體置於左上角,並在圖說中引用。
- 軸標籤:數量 + 單位 + 尺度(如
Days since disclosure (log scale))。 - 然後使用
references/captions.md編寫圖說:結論 → 軸顯示的內容 → 單位/樣本數/信賴區間 → 讀者絕對不能錯過的一個注意事項。
步驟 4 — 使其印刷安全
- 調色盤:
scripts/figure_style.py中的SERIES(Okabe–Ito)。序數資料:使用cividis,絕不使用jet。發散資料:使用RdBu_r,且僅圍繞有意義的零點。 - 也透過形狀編碼:標記和線條樣式隨系列變化,使圖表能在灰階印刷和色盲審稿人面前存活。
- 執行檢查腳本:
python scripts/check_figure.py figs/fig1_cdf.png --preview
它會報告尺寸/DPI、色調調色盤、灰階和綠色弱分離情況,並寫出 fig1_cdf_gray.png / fig1_cdf_cvd.png。請檢查兩者。
references/accessibility.md 涵蓋了細節(對比度、色覺辨認障礙、替代文字)。
步驟 5 — 匯出並包含
- 匯出嵌入了 TrueType 字型的向量 PDF(
pdf.fonttype = 42,已設定)。 - 以印刷寬度包含:
\includegraphics[width=\columnwidth]{figs/fig1_cdf.pdf}。 - 以 100% 比例檢查編譯後的 PDF:沒有小於 7 pt 的文字,沒有被裁剪的標籤,沒有圖表高度超過半欄(除非它是論文的主要概念圖)。
references/production.md涵蓋 LaTeX 包含、字型嵌入和檔案佈局。
步驟 6 — 像審稿人一樣驗證
- 五秒測試:將圖表單獨展示給某人;他們能否說出論點?
- 圖說測試:第一句應該是論點,而不是「圖 3 顯示了……」。
- 灰階測試:兩個預覽圖都正確可讀。
- 縮放測試:在編譯後 PDF 的 100% 縮放下,每個標籤都清晰可見。
- 完整性測試:圖表中的數字與表格和文字相符;座標軸未被截斷;誤差條在圖說中有定義。
- 重用測試:刪除 PNG;腳本是否能重新產生位元組完全相同的檔案?應該可以。
展示項目預算
| 場地類別 | 總展示項目數 | 備註 |
|---|---|---|
| 頂尖四大會議 | 6–10 | 一張概念圖、一張時間軸、結果表格;每個項目都在文字中被引用 |
| 雜誌 | 4–6 | 每個項目一個訊息;使用側欄代替附錄 |
| 期刊 | 8–12 | 空間更大,規則相同 |
如果一張圖表在文字中沒有伴隨著論點引用(例如「圖 5 顯示了 X」),請移除它或改寫該句子。
反模式
| 反模式 | 失敗原因 |
|---|---|
| 彩虹/jet 色圖 | 非感知排序;誤導性數值;灰階下不可讀 |
| 3D 或帶陰影的長條圖/圓餅圖 | 扭曲比較的裝飾 |
| 超過 3 個扇區的圓餅圖 | 人類不善於比較角度;請使用排序後的長條圖 |
| 雙 Y 軸 | 容易引發資料不支援的相關性推論;請使用兩個面板 |
| 長條圖截斷 Y 軸 | 誇大差異;審稿人會注意到 |
| 包含 6 個條目的圖例框 | 迫使讀者對色;請使用直接標籤或小型多組圖 |
| 在 LaTeX 中縮小的微小文字 | 字型低於 7 pt;圖表變成灰色噪聲 |
| 列出顏色的圖說 | 「藍色線條顯示了……」告訴讀者他們已經能看到的東西,毫無用處 |
| 表格的螢幕截圖 | 非向量、不可編輯、不易存取 |
| 重述表格的圖表 | 浪費一個展示項目;保留支援論點的那個 |
| 未標示的對數軸 | 讀者無法比較跨十的冪次的斜率 |
| 缺少樣本數/誤差條 | 沒有不確定性的點估計不是證據 |
資源對應表
| 檔案 | 用途 |
|---|---|
references/venue-figure-profiles.md | 頂尖四大會議的期望、欄寬、圖說/放置規則 |
references/encoding-guide.md | 論點 → 圖表對應、對數尺度、不確定性、何時使用表格 |
references/style-spec.md | 每個 matplotlib 設定及其原因;調色盤十六進位色碼 |
references/captions.md | 圖說公式以及前後對比範例 |
references/accessibility.md | 色盲與灰階安全、對比度、替代文字 |
references/production.md | 匯出、LaTeX 包含、字型、檔案佈局、可重現性 |
references/anti-patterns.md | 應移除的內容,附帶範例說明 |
scripts/figure_style.py | rcParams、Okabe–Ito 調色盤、new_fig、save、panel_label |
scripts/check_figure.py | 尺寸/DPI 檢查、灰階和綠色弱預覽、調色盤報告 |
scripts/make_examples.py | 產生所有範例圖表(使用合成資料) |
examples/ | 參考圖像:良好範例,以及一組好/壞對比 |
templates/figure-brief.md | 繪製前的一頁簡報 |