資料科學 視覺化 圖表

Mermaid 圖表入門與生成指南

Mermaid 圖表入門與生成指南

Mermaid 是一個輕量級的圖表生成工具,讓你可以使用簡單的文本語法來創建各式各樣的視覺化圖表。本指南將從基礎概念開始,逐步深入到進階應用,包括如何使用 Python 和 ChatGPT 來輔助生成 Mermaid 圖表。

1. Mermaid 基礎介紹

什麼是 Mermaid?

Mermaid 是一個 JavaScript 函式庫,允許使用者通過簡單的文本描述來生成圖表,類似於 PlantUML。這種「以程式碼繪製圖表」的方式非常適合在多種文本環境(如 Markdown 文件)中嵌入視覺化內容。

支援平台與工具

  • GitHub 和 GitLab
  • Notion
  • Obsidian
  • VS Code(搭配擴充功能)
  • 各種支援 Markdown 的編輯器

Mermaid 的特點

  • 簡單易學:只需學習基本語法就能創建各種圖表
  • 集成性強:支援多種工具和平台
  • 可自訂性:可調整顏色、樣式、方向等
  • 輕量且易於分享:以文本格式存儲,便於版本控制和協作

2. Mermaid 常見圖表類型

流程圖 (Flowchart)

最基本且常用的圖表類型,用於表示過程步驟和決策。

graph TD
    A[開始] --> B{是否成功?}
    B -->|是| C[完成]
    B -->|否| D[重試]
    D --> B

時序圖 (Sequence Diagram)

展示對象之間的交互和消息流動順序。

sequenceDiagram
    Alice->>Bob: 問候
    Bob-->>Alice: 回答
    Alice->>Charlie: 發送消息
    Charlie-->>Alice: 確認收到

甘特圖 (Gantt Chart)

用於顯示專案時間線和任務排程。

gantt
    title 專案甘特圖
    dateFormat YYYY-MM-DD
    section 需求分析
    任務A :a1, 2025-03-01, 5d
    任務B :after a1, 3d
    section 開發
    任務C :2025-03-10, 10d

圓餅圖 (Pie Chart)

呈現數據比例關係的圖表。

pie
    title 瀏覽器市場佔比
    "Chrome": 63.6
    "Safari": 19.2
    "Edge": 4.1
    "Firefox": 3.6
    "Others": 9.5

象限圖 (Quadrant Chart)

將數據點分佈在四個象限中進行分析。

quadrantChart
    title Reach and engagement of campaigns
    x-axis Low Reach --> High Reach
    y-axis Low Engagement --> High Engagement
    quadrant-1 We should expand
    quadrant-2 Need to promote
    quadrant-3 Re-evaluate
    quadrant-4 May be improved
    Campaign A: [0.3, 0.6]
    Campaign B: [0.45, 0.23]
    Campaign C: [0.57, 0.69]

時間線圖 (Timeline)

用於展示事件按時間順序的發展。

timeline
    title History of Social Media Platform
    2002 : LinkedIn
    2004 : Facebook
         : Google
    2005 : YouTube
    2006 : Twitter

XY 圖表 (XY Chart)

用於表示兩個變量之間的關係,包括折線圖和柱狀圖。

xychart-beta
    title "Sales Revenue"
    x-axis [jan, feb, mar, apr, may, jun]
    y-axis "Revenue (in $)" 4000 --> 11000
    bar [5000, 6000, 7500, 8200, 9500, 10500]
    line [5000, 6000, 7500, 8200, 9500, 10500]

3. Mermaid 語法基礎

基本結構

Mermaid 圖表通常以圖表類型關鍵字開始,後面跟著圖表的具體內容。例如:

graph TD
    [圖表內容]

常用元素

  • 節點:使用各種形狀表示,如 A[方形]B(圓角方形)C{菱形}
  • 連線:使用箭頭表示關係,如 -->--->--o--x
  • 文本:可以在節點或連線上添加文本說明
  • 分組:使用 subgraph 將相關節點分組

方向設定

  • TB / TD - 從上到下 (Top to Bottom/Top to Down)
  • BT - 從下到上 (Bottom to Top)
  • RL - 從右到左 (Right to Left)
  • LR - 從左到右 (Left to Right)

4. 進階用法

樣式定製

可以通過 classDefclass 來定義和應用樣式:

graph TD
    A[開始] --> B[結束]

    classDef green fill:#9f6,stroke:#333,stroke-width:2px;
    classDef orange fill:#f96,stroke:#333,stroke-width:4px;

    class A green
    class B orange

分組與嵌套

使用 subgraph 創建分組:

graph TB
    subgraph 分組1
        A[節點A] --> B[節點B]
    end

    subgraph 分組2
        C[節點C] --> D[節點D]
    end

    B --> C

主題設定

使用初始化指令來設定主題:

%%{init: { 'theme': 'forest' } }%%
graph TD
    A[開始] --> B[結束]

可選主題包括: default, forest, dark, neutral, base

5. 使用 Python 生成 Mermaid 圖表

Python 能夠輕鬆處理數據並生成 Mermaid 語法,非常適合自動化生成各種圖表。

生成時序圖示例

def generate_mermaid_sequence(data):
    """將整理好的資料轉換為 Mermaid 時序圖語法"""
    mermaid_code = "sequenceDiagram\n"
    for entry in data:
        mermaid_code += f'    {entry["from"]}->>{entry["to"]}: {entry["message"]}\n'
    return mermaid_code

# 範例資料
data = [
    {"from": "User", "to": "Server", "message": "Request data"},
    {"from": "Server", "to": "Database", "message": "Query for data"},
    {"from": "Database", "to": "Server", "message": "Return data"},
    {"from": "Server", "to": "User", "message": "Send response"}
]

# 生成 Mermaid 語法
mermaid_code = generate_mermaid_sequence(data)

# 將結果寫入檔案
with open("sequence_diagram.md", "w", encoding="utf-8") as file:
    file.write(f"\`\`\`mermaid\n{mermaid_code}\`\`\`")

生成圓餅圖示例

def generate_mermaid_pie_chart(data, title="數據統計圓餅圖"):
    """根據整理好的資料,生成 Mermaid Pie Chart 語法"""
    mermaid_code = f"pie\n    title {title}\n"
    for item in data:
        mermaid_code += f'    "{item["label"]}": {item["value"]}\n'
    return mermaid_code

# 範例資料
data = [
    {"label": "Chrome", "value": 63.6},
    {"label": "Safari", "value": 19.2},
    {"label": "Edge", "value": 4.1},
    {"label": "Firefox", "value": 3.6},
    {"label": "Others", "value": 9.5},
]

# 生成 Mermaid Pie Chart 語法
mermaid_code = generate_mermaid_pie_chart(data, "瀏覽器市場佔比")

6. 使用 ChatGPT 生成 Mermaid 圖表

當你需要快速生成 Mermaid 圖表但不想編寫程式碼時,可以使用 ChatGPT 來協助。

有效的提示詞範例

流程圖生成提示詞

請將以下流程描述轉換為 Mermaid 流程圖語法:

1. 用戶提交訂單
2. 系統檢查庫存
3. 如果庫存充足,則確認訂單;如果庫存不足,則通知用戶
4. 確認訂單後,系統處理付款
5. 如果付款成功,則準備發貨;如果付款失敗,則取消訂單
6. 發貨後,通知用戶追蹤資訊

時序圖生成提示詞

請為以下場景生成 Mermaid 時序圖語法:

用戶在網站上登入帳號,系統需要驗證用戶身份,然後授權用戶訪問資源。

7. Mermaid 圖表配置與自定義

圖表配置

許多 Mermaid 圖表類型支持各種配置選項,例如:

%%{init: {"quadrantChart": {"chartWidth": 400, "chartHeight": 400}, "themeVariables": {"quadrant1TextFill": "#ff0000"} }}%%
quadrantChart
  x-axis Urgent --> Not Urgent
  y-axis Not Important --> "Important ❤"
  quadrant-1 Plan
  quadrant-2 Do
  quadrant-3 Delegate
  quadrant-4 Delete

節點樣式自定義

可以直接定義節點樣式或使用類來定義:

Point A: [0.9, 0.0] radius: 12
Point B: [0.8, 0.1] color: #ff3300, radius: 10
Point C: [0.7, 0.2] radius: 25, color: #00ff33, stroke-color: #10f0f0

classDef class1 color: #109060
classDef class2 color: #908342, radius : 10
Point D:::class1: [0.6, 0.3]
Point E:::class2: [0.5, 0.4]

8. Mermaid 應用場景

Mermaid 圖表在各種情境下都非常有用:

  • 文檔與筆記:在技術文檔、學習筆記中嵌入圖表,提升可讀性
  • 專案管理:使用甘特圖規劃和追蹤專案進度
  • 系統架構設計:使用流程圖、時序圖描述系統組件和互動關係
  • 數據分析與報告:使用圓餅圖、XY圖等視覺化數據
  • 教育與簡報:通過圖表簡化複雜概念,提升理解效果

9. 進階使用技巧

  • 結合其他工具(如 Jupyter Notebook)使用 Mermaid
  • 使用互動功能,如可點擊的連結
  • 整合到持續集成流程中,自動生成文檔
  • 利用分組功能創建更複雜的圖表層次

10. 參考資源

  • Mermaid 官方文檔
  • Mermaid Live Editor - 線上圖表編輯器
  • GitHub 上的 Mermaid 儲存庫

通過以上方法,你可以輕鬆地使用 Mermaid 創建各種圖表,無論是手動編寫語法,還是通過 Python 自動生成,或是藉助 ChatGPT 快速產出圖表程式碼。

使用 Prompt 生成 Mermaid 圖表的提詞範例

以下是 10 個使用 Prompt 生成 Mermaid 圖表的提詞範例,涵蓋各種常見圖表類型和應用場景:

1. 基本流程圖提示詞

請為以下軟體開發流程創建 Mermaid 流程圖:

1. 需求分析
2. 系統設計
3. 編碼開發
4. 測試驗證
5. 部署上線
6. 維護更新

請確保使用從上到下的方向,並為每個步驟使用適當的形狀。

2. 決策流程圖提示詞

請創建一個 Mermaid 流程圖,描述顧客購物決策過程:

1. 顧客瀏覽產品
2. 顧客決定是否購買
   - 如果決定購買,加入購物車
   - 如果不購買,繼續瀏覽或退出
3. 顧客結帳
4. 系統確認付款
   - 如果付款成功,處理訂單
   - 如果付款失敗,返回付款頁面
5. 商品發貨
6. 客戶收貨確認

請使用從左到右的方向,並使用菱形表示決策點。

3. 系統架構時序圖提示詞

請為以下微服務系統間的交互創建 Mermaid 時序圖:

1. 用戶通過前端界面發送請求
2. API 網關接收請求並驗證用戶身份
3. 如果身份驗證失敗,返回錯誤信息
4. 如果身份驗證成功,API 網關將請求轉發到對應的服務
5. 服務處理請求並查詢數據庫
6. 數據庫返回結果
7. 服務處理結果並回傳給 API 網關
8. API 網關將結果返回給前端
9. 前端顯示結果給用戶

請標明每個步驟的消息內容,並使用不同的箭頭表示同步和異步通信。

4. 專案甘特圖提示詞

請為以下網站開發項目創建 Mermaid 甘特圖:

1. 需求收集:2025-03-01 到 2025-03-10
2. 界面設計:2025-03-11 到 2025-03-20
3. 前端開發:2025-03-21 到 2025-04-10
4. 後端開發:2025-03-21 到 2025-04-15
5. 數據庫設計:2025-03-15 到 2025-03-25
6. 系統整合:2025-04-16 到 2025-04-25
7. 測試:2025-04-26 到 2025-05-10
8. 部署上線:2025-05-11 到 2025-05-15

請將任務分為「規劃」、「開發」和「部署」三個部分,並使用不同的顏色標記。

5. 數據比例圓餅圖提示詞

請使用 Mermaid 創建一個圓餅圖,顯示以下手機操作系統的市場份額:

- Android: 72.2%
- iOS: 26.8%
- 其他: 1.0%

請為圖表加上標題「2024 年全球手機操作系統市場份額」,並使用適當的顏色區分不同的部分。

6. 產品評估象限圖提示詞

請創建一個 Mermaid 象限圖,用於評估我們的產品線:

- X 軸:從「低成本」到「高成本」
- Y 軸:從「低利潤」到「高利潤」
- 象限 1(右上):「明星產品」
- 象限 2(左上):「現金牛」
- 象限 3(左下):「瘦狗」
- 象限 4(右下):「問題產品」

請添加以下產品到圖表中:
- 產品 A:成本 0.7,利潤 0.8
- 產品 B:成本 0.3,利潤 0.9
- 產品 C:成本 0.8,利潤 0.3
- 產品 D:成本 0.2,利潤 0.2
- 產品 E:成本 0.5,利潤 0.5

請為象限圖添加標題「產品投資組合分析」。

7. 公司發展時間線提示詞

請創建一個 Mermaid 時間線圖,顯示我們公司的發展歷程:

標題:「公司發展大事記」

分段「創業期」:
- 2010:公司成立
- 2011:首款產品發布
- 2012:獲得天使投資

分段「成長期」:
- 2013:完成 A 輪融資
- 2015:用戶數量突破 100 萬
- 2017:進入國際市場

分段「成熟期」:
- 2019:上市
- 2021:年營收突破 10 億
- 2023:收購競爭對手
- 2025:全球用戶突破 10 億

請使用適當的樣式和顏色區分不同的發展階段。

8. 系統狀態圖提示詞

請為一個電子商務訂單系統創建 Mermaid 狀態圖:

1. 初始狀態:新訂單
2. 訂單提交後變為「待處理」
3. 「待處理」狀態可以轉變為:
   - 「已確認」(當系統確認訂單)
   - 「已取消」(當用戶取消訂單)
4. 「已確認」狀態轉變為「出貨中」(當商品出庫)
5. 「出貨中」狀態轉變為「已送達」(當商品送達)
6. 「已送達」狀態可以轉變為:
   - 「已完成」(當用戶確認收貨)
   - 「退貨中」(當用戶申請退貨)
7. 「退貨中」狀態轉變為「已退款」(當退貨完成)
8. 「已完成」和「已退款」是最終狀態

請使用適當的箭頭和標籤表示狀態轉換的條件。

9. 數據比較 XY 圖表提示詞

請創建一個 Mermaid XY 圖表,比較過去 6 個月的收入和支出:

標題:「2024 財務概況」

X 軸:1 月、2 月、3 月、4 月、5 月、6 月
Y 軸:「金額 (萬元)」 0 --> 50

收入數據(柱狀圖):[32, 35, 30, 38, 42, 45]
支出數據(折線圖):[28, 30, 33, 35, 34, 36]

請確保使用不同的顏色區分收入和支出,並添加適當的標題和軸標籤。

10. 網絡拓撲圖提示詞

請創建一個 Mermaid 流程圖,描述以下網絡拓撲:

中心是一個「核心路由器」,連接到四個「邊緣交換機」(分別標記為 A、B、C、D)。

每個邊緣交換機連接到:
- 一個「部門伺服器」
- 兩個「工作站群組」

核心路由器還連接到「互聯網」和「數據中心」。

請使用以下形狀:
- 路由器:菱形
- 交換機:圓角矩形
- 伺服器:圓形
- 工作站群組:長方形
- 互聯網:雲形
- 數據中心:資料庫形狀

請使用從中心向外發散的方向,並為不同類型的設備使用不同的顏色。

這些提詞範例涵蓋了各種 Mermaid 圖表類型和應用場景,可以根據實際需求進行調整和組合。使用這些提詞時,確保提供足夠的細節和特定要求,以獲得最符合你需求的圖表。