tw-research-viz
Installation
SKILL.md
學術論文資料視覺化工具 v2.0
哲學定位
「一張好的學術圖表,能讓審稿人在 30 秒內理解你的研究邏輯。」
Step 0:讀取必要文件
references/academic_viz_types.md— 學術圖表類型與規範references/apa7_figure_format.md— APA/APA 7th 圖表格式要求../../tw_edu_guided_collection.md— 引導式收集框架
若 Excalidraw MCP 可用:
→ 優先使用 Excalidraw 生成可編輯圖表
→ 調用 Excalidraw:create_view 工具
概念對齊協議(必要前置步驟):
../../tw_edu_concept_alignment.md
→ 在執行任何工作前,先完成概念對齊確認卡。
Step 1:引導式資訊收集(三輪)
第一輪(核心,必問)
Q1: 「要視覺化什麼類型的內容?
A. 研究架構 / 概念框架
B. 文獻關係圖(如:文獻引用網絡、主題分群)
C. 研究流程圖(含 PRISMA/SLR 流程)
D. 理論模型(變數關係、路徑圖)
E. 統計數據視覺化(長條圖/折線/雷達圖)
F. 心智圖 / 主題概念地圖
G. 其他(請描述)」
Q2: 「請提供核心資料:
・研究題目 / 主題
・要呈現的主要元素(節點/變數/步驟等)
・元素之間的關係(A→B、A←→B、A包含B)」
第二輪(細節,選填)
Q3: 「圖的最終用途?
A. 嵌入 Word/PDF 論文(需高解析度)
B. 學術報告/簡報(.pptx)
C. 研討會海報
D. 線上分享 / 可編輯版本」
Q4: 「格式 Preset(投稿/提交目標)?
A. 臺灣學位論文格式(標楷體、Times New Roman)
B. APA 7th 社會科學期刊(SSCI,單欄較寬)
C. 國際理工期刊(Nature/Science 雙欄,sans-serif 字體)
D. 無特殊要求(使用預設學術格式)」
Q5: 「色彩模式?
A. 標準學術配色(現有深藍主色系)
B. 色盲友善模式(Okabe-Ito 8色系,推薦投稿期刊時使用)
C. 黑白灰階(適合單色列印、部分老期刊要求)」
確認摘要
✅ 圖表類型:{類型}
📐 元素數量:{N 個節點/步驟}
🎨 風格:{黑白/有限色/全彩}
🔧 生成工具:{Excalidraw MCP / SVG / matplotlib}
📄 輸出格式:{svg/png/pptx 嵌入}
Step 2:圖表類型規範
A. 研究架構圖 / 概念框架
適用:展示研究的整體架構、各構念之間的關係
Excalidraw 元素設計:
・矩形(圓角)= 構念/變數
・箭頭 = 影響方向(實線 = 假設正向影響)
・虛線箭頭 = 調節/中介關係
・雙向箭頭 = 相關但無因果方向
分層建議:
├── 前置變數(左側或上方)
├── 核心構念(中央)
└── 結果變數(右側或下方)
標記規範(APA 7th):
H1, H2... = 假設編號(在箭頭旁標注)
β = 標準化路徑係數(若有統計結果)
B. PRISMA 系統性文獻回顧流程圖
標準 4 階段結構(PRISMA 2020):
識別(Identification)
│ 資料庫搜尋(N = )
│ 移除重複(n = )
↓
篩選(Screening)
│ 標題/摘要篩選(n = 排除 / 原因)
↓
資格審查(Eligibility)
│ 全文審查(n = 排除 / 原因清單)
↓
納入(Included)
└── 最終納入文獻(n = )
Excalidraw 樣式:
・識別 = 藍色框
・篩選 = 黃色框
・資格 = 橘色框
・納入 = 綠色框
・排除原因 = 側邊虛線框
C. 文獻關係圖 / 主題群聚
適用:展示不同文獻/學者之間的引用關係或主題分群
元素設計:
・圓形節點 = 重要文獻/學者
・節點大小 = 被引用次數(越大越重要)
・線條粗細 = 關係強度
・色彩分群 = 研究主題/時期
若文獻數量 > 20:建議使用 Python 腳本生成圖表(matplotlib + networkx)
D. 路徑模型圖(SEM / 迴歸)
元素設計:
・橢圓 = 潛在變數(latent variable)
・矩形 = 觀測變數(observed variable)
・單向箭頭 = 因果路徑(標注路徑係數)
・雙向彎曲箭頭 = 相關/共變
・小圓圈 e = 誤差項
標注規範:
顯著路徑:β = .XX, p < .001(標注 ***)
非顯著路徑:β = .XX, ns(虛線箭頭)
E. 統計數據視覺化
圖表選擇指南:
比較多組 → 長條圖(bar chart)
趨勢/時序 → 折線圖(line chart)
比例/組成 → 圓餅圖/環形圖
多維度比較 → 雷達圖(spider chart)
相關關係 → 散佈圖(scatter plot)
分佈情況 → 箱形圖(box plot)
生成工具:
→ Python matplotlib / seaborn 腳本
→ 或呼叫 Three.js 3D Viewer(3D 資料呈現)
Step 3:Excalidraw MCP 調用規範
優先使用 Excalidraw MCP 的情境
✅ 研究架構圖、概念框架
✅ PRISMA 流程圖
✅ 文獻關係圖(< 20 節點)
✅ 心智圖
✅ 任何需要「可編輯」的圖表
Excalidraw 調用前的準備
Step 1:讀取 Excalidraw read_me
→ 呼叫 Excalidraw:read_me 取得元素格式規範
Step 2:設計元素結構(JSON)
元素類型:rectangle / ellipse / arrow / text / diamond
元素屬性:x, y, width, height, backgroundColor, strokeColor, label
Step 3:呼叫 create_view
Excalidraw:create_view(elements: JSON 陣列字串)
色彩系統(依 Q5 選擇套用)
A. 標準學術配色(預設)
ACADEMIC_PALETTE = {
"primary": "#1A5276", # 深藍:主要節點
"secondary": "#2471A3", # 中藍:次要節點
"accent": "#D4AC0D", # 金色:強調節點
"boundary": "#1E8449", # 綠色:邊界節點
"background": "#EBF5FB", # 淺藍:背景
"text": "#1C2A35", # 深色:文字
}
B. Okabe-Ito 色盲友善 8 色系(推薦投稿使用)
OKABE_ITO = [
"#E69F00", # 橙色
"#56B4E9", # 天藍
"#009E73", # 藍綠
"#F0E442", # 黃色
"#0072B2", # 深藍
"#D55E00", # 深橙
"#CC79A7", # 紫粉
"#000000", # 黑色(第8色備用)
]
# 適用情境:投稿 Nature/Science/PLOS ONE 等國際期刊時強烈推薦
# 原理:對三種最常見色盲類型(紅綠色盲、藍黃色盲、全色盲)均可辨識
C. 灰階模式(單色列印)
GRAYSCALE = ["#000000", "#404040", "#808080", "#B0B0B0", "#D8D8D8", "#FFFFFF"]
# 使用時搭配不同形狀/線條樣式(實線/虛線/點線)作為主要區分手段
學術圖表元素設計原則
顏色系統(依上方選擇套用):
主要節點:ACADEMIC_PALETTE["primary"] 或 OKABE_ITO[4](深藍)
次要節點:ACADEMIC_PALETTE["secondary"] 或 OKABE_ITO[1](天藍)
強調節點:ACADEMIC_PALETTE["accent"] 或 OKABE_ITO[0](橙色)
邊界節點:ACADEMIC_PALETTE["boundary"] 或 OKABE_ITO[2](藍綠)
背景色:#EBF5FB(淺藍,避免純白)
文字:#1C2A35(深色)
字型:
節點標題:14px 粗體
路徑標注:12px 細體
圖注:12px 斜體
連接器:
因果關係:實線箭頭
相關關係:雙向箭頭
包含關係:虛線框
調節關係:虛線箭頭
Step 4:Python 輔助腳本(無 Excalidraw MCP 時)
# 生成 PRISMA 流程圖
python scripts/generate_prisma.py \
--identified [N] \
--duplicates [n] \
--screened [n] \
--eligible [n] \
--included [n] \
--output "/mnt/user-data/outputs/PRISMA流程圖.png"
# 生成研究架構圖
python scripts/generate_framework.py \
--nodes "[節點1:類型,節點2:類型,...]" \
--edges "[節點1->節點2:標籤,...]" \
--output "/mnt/user-data/outputs/研究架構圖.svg"
Step 5:APA 7th 圖表格式規範
圖注格式(Figure caption):
Figure X
[圖表標題(首字大寫,不加句點)]
注意。[說明文字,如有]。[資料來源,如改編自其他研究]
範例:
Figure 1
Conceptual Framework of Teacher AI Competency and Student Learning Outcomes
注意。本架構整合 Davis (1989) 科技接受模型與 Bandura (1977) 自我效能理論。
圖表編號規則:
・全論文連續編號(Figure 1, 2, 3...)
・圖注置於圖的正下方
・圖標題與論文正文字體一致(通常為 Times New Roman 12pt)
Step 6:MCP 整合對照表
| 功能 | Claude Code | Claude.ai | Codex | Antigravity |
|---|---|---|---|---|
| Excalidraw 互動圖 | ✅ MCP | ✅ MCP(若連接) | ✅(需設定 config.toml) | ✅(MCP Hub) |
| 統計圖(matplotlib) | ✅ Bash | ✅ Bash | ✅ | ✅ |
| 匯出為 .png/.svg | ✅ | ✅ | ✅ | ✅ |
| Three.js 3D 視覺化 | ✅ MCP | ✅ MCP(若連接) | ✅(需設定 config.toml) | ✅(MCP Hub) |
Excalidraw MCP 未連接時的降級方案
- 使用 Python
matplotlib生成.png靜態圖表 - 生成 SVG 代碼(可貼入 Inkscape 或 Figma 繼續編輯)
- 生成 Mermaid 語法(flowchart/graph)輸出供用戶複製
- 提供 draw.io XML(可匯入 diagrams.net 編輯)
Step 7:期刊格式 Preset 規範
依 Q4 選擇的格式,套用以下規範:
A. 臺灣學位論文格式
字型:
中文標題/標注:標楷體 12pt(粗體用於標題)
英文/數字:Times New Roman 12pt
圖表尺寸:單欄全寬(文字區寬度,通常約 14-16 cm)
解析度:≥ 300 DPI(印刷用)
格式:PNG 或 PDF(嵌入 Word)
圖注語言:中英對照,Figure 1 / 圖1
B. APA 7th 社會科學期刊(SSCI)
字型:
圖表內文字:Sans-serif(如 Arial、Calibri)8-12pt
圖注:Times New Roman 12pt(與正文一致)
圖表尺寸:單欄(8.5 cm)或全寬(17.8 cm)
解析度:≥ 300 DPI(點陣圖)/ 向量格式優先(EPS/PDF)
格式:EPS > PDF > TIFF > PNG(JPEG 禁用)
色彩:強烈建議使用 Okabe-Ito 色盲友善色系
注意:圖注(caption)在圖的下方,標題僅首字大寫
C. 國際理工期刊(Nature/Science 系)
字型:
圖表內文字:Helvetica 或 Arial(sans-serif),最小 6pt
單欄圖時,字體縮放後仍需 ≥ 6pt(列印版)
圖表尺寸:
單欄:8.9 cm(89 mm)
雙欄:18.3 cm(183 mm)
最大高度:24.7 cm(247 mm)
解析度:線條藝術圖 ≥ 1,000 DPI;混合圖 ≥ 600 DPI;照片 ≥ 300 DPI
格式:PDF(向量)> EPS > TIFF;JPEG 僅限照片
色彩:CMYK 色彩空間(非 RGB,提交出版時注意)
強制使用色盲友善色系(Nature 期刊編輯政策要求)
Step 8:Publication-quality 輸出標準
Python 高品質圖表匯出模板
import matplotlib.pyplot as plt
import matplotlib as mpl
# === 依格式 Preset 設定參數 ===
# --- Preset A:臺灣學位論文 ---
# plt.rcParams.update({
# "figure.dpi": 300,
# "savefig.dpi": 300,
# "font.family": ["Noto Sans CJK TC", "Times New Roman"],
# "font.size": 12,
# "axes.labelsize": 12,
# "xtick.labelsize": 10,
# "ytick.labelsize": 10,
# })
# --- Preset B:APA 7th / SSCI(推薦) ---
plt.rcParams.update({
"figure.dpi": 300,
"savefig.dpi": 300,
"font.family": "Arial",
"font.size": 10,
"axes.labelsize": 10,
"axes.spines.top": False,
"axes.spines.right": False,
"figure.figsize": (8.5 / 2.54, 6 / 2.54), # 8.5 cm 寬,單位轉換
})
# --- Preset C:Nature/Science 雙欄 ---
# plt.rcParams.update({
# "figure.dpi": 600,
# "savefig.dpi": 600,
# "font.family": "Helvetica",
# "font.size": 8,
# "axes.labelsize": 8,
# "xtick.labelsize": 7,
# "ytick.labelsize": 7,
# "figure.figsize": (18.3 / 2.54, 8 / 2.54), # 183 mm 寬
# })
# === 色盲友善色系(Okabe-Ito)===
OKABE_ITO = ["#E69F00", "#56B4E9", "#009E73", "#F0E442",
"#0072B2", "#D55E00", "#CC79A7", "#000000"]
# --- 實際繪圖 ---
fig, ax = plt.subplots()
# [在此加入你的繪圖程式碼,使用 OKABE_ITO 作為色彩清單]
# === 匯出(向量優先)===
fig.tight_layout()
fig.savefig("figure.pdf", bbox_inches="tight") # 向量(最優先)
fig.savefig("figure.svg", bbox_inches="tight") # 向量(可在 Inkscape 編輯)
fig.savefig("figure.png", dpi=300, bbox_inches="tight") # 點陣備份
print("✅ 圖表已匯出:figure.pdf / figure.svg / figure.png")
字型最小值核查
# 確認圖表縮放至目標尺寸後,文字仍 ≥ 6pt
def check_font_size(fig, target_width_cm, min_pt=6):
current_width_inches = fig.get_figwidth()
target_width_inches = target_width_cm / 2.54
scale_factor = target_width_inches / current_width_inches
current_fontsize = plt.rcParams["font.size"]
effective_fontsize = current_fontsize * scale_factor
if effective_fontsize < min_pt:
print(f"⚠️ 警告:縮放後字型大小約 {effective_fontsize:.1f}pt,低於最小值 {min_pt}pt")
print(f" 建議:將 font.size 提高至 {current_fontsize / scale_factor * min_pt / effective_fontsize:.0f}pt")
else:
print(f"✅ 字型大小符合要求(縮放後約 {effective_fontsize:.1f}pt)")
Step 9:品質確認清單(v2.0)
- 圖表邏輯清晰,看圖能理解研究核心
- 已選擇適當格式 Preset(臺灣論文 / APA / Nature)
- 字型符合 Preset 規範(字體名稱、最小 pt 值)
- 色彩選擇已考慮色盲友善性(建議 Okabe-Ito)
- 顏色不超過 3-4 種(印刷版可在灰階下辨識)
- 箭頭方向明確、無歧義
- 有 APA 7th 或目標期刊格式的圖注
- 向量格式已匯出(PDF / EPS / SVG)
- 解析度符合要求(印刷 ≥ 300 DPI;Nature 線稿 ≥ 1,000 DPI)
- 圖表尺寸符合目標欄寬(單欄 / 雙欄 cm)
- Excalidraw 版本可供後續編輯(若 MCP 可用)
Related skills