科研工具

出版級科學圖表工具 —— 一句話調圖

出版級科學圖表工具 —— 一句話調圖

每個研究生都經歷過:資料明明算完了,卻還要跟 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)

← 回到作品集