出版級科學圖表工具 —— 一句話調圖
每個研究生都經歷過:資料明明算完了,卻還要跟 matplotlib 或 Origin 的選單搏鬥半天, 才擠出一張「勉強能投稿」的圖。這個工具就是為了消滅這件事 —— 上傳 CSV → 選圖型 → 套上出版級樣式 → 下載投稿等級的圖,全程不用寫一行程式。
殺手鐧:自然語言調圖
v0.2 的核心功能:在側邊欄打一句話,例如
「換成散點圖、y 軸取 log、配色換 Nature 風」
Claude 會把這句話轉成一組新的繪圖參數,工具立刻重畫。 不用查文件、不用記參數名,跟圖表「對話」就能改圖。
為什麼做這個
我在探索「用 AI 做產品」時給自己定的原則:做產品,而不是接案。 選這個題目是因為它是「大市場 × 窄切角」——所有研究者都要畫圖, 但「出版級樣式 + AI 調圖」這個切角幾乎沒有對手。而且我自己就是計算化學的使用者, 製作者同時是目標用戶,需求判斷不會失真。範例資料就是一份 VASP 截斷能收斂測試。
設計上的關鍵決定
用 structured outputs 保證 AI 輸出合法
自然語言調圖最怕 AI 回一段「看起來像參數」的自由文字。我用 Claude API 的 structured outputs(JSON schema),強制它只能回傳符合 schema 的參數物件—— 不合法的值根本出不來,工具端再做一層 sanitize,雙保險。
優雅降級
沒有設定 API key 時,只停用「一句話調圖」,手動調圖與匯出完全不受影響。 工具的核心價值不能被一把外部鑰匙綁架。
出版級是預設,不是選項
字型大小、線寬、刻度方向、色盲友善色盤——全部內建成預設樣式。 使用者不需要知道「什麼是出版級」,畫出來就是。
技術架構
- Streamlit 做 UI:收參數、預覽、下載,純 Python 快速迭代
- matplotlib 繪圖核心:資料 + 選項 → figure,與 UI 完全解耦
- Claude API 自然語言 → 參數:AI 回傳寫進暫存,rerun 時覆蓋 UI 狀態
- 匯出 PNG(300 dpi)/ SVG / PDF 向量,直接符合期刊投稿要求
Roadmap
- v0.1 折線 / 散點 / 長條 + 出版級樣式 + 色盲色盤 + 三格式匯出
- v0.2 自然語言調圖
- v0.3 誤差棒 / 雙 Y 軸 / 子圖
- v0.4 期刊模板(ACS / APS / IEEE)
- 驗證計畫:丟給 5 個研究生,問一句「能不能讓你不用再跟 matplotlib 搏鬥?」
我學到的東西
- 「先上線、找真實使用者驗證、再加功能」的產品思維
- 用 JSON schema 約束 LLM 輸出,讓 AI 功能可靠到能放進產品
- Streamlit 的狀態管理(keyed widgets + session state)