文本繪圖:Mermaid


mermaid

[ˈmɜː(r)ˌmeɪd]

美人魚

讀音是“莫美德”

  • 不丑,還挺好看
  • 沒有開始、結束的套路代碼,只有圖類型名稱

https://mermaid-js.github.io/

在線編輯:https://mermaid-js.github.io/mermaid-live-editor

Mermaid 本質是一種標記語言,借由一個解析庫 將文本 「翻譯渲染」成「圖畫」。

雖然通過一個純文本編輯器,例如:寫字板,我們可以撰寫 Mermaid 文本,但顯然不能指望這樣就可以「渲染」出「繪圖」來。這和 Markdown 的原理是一樣的,渲染需要專門的編輯器。 好消息是,Mermaid 已經被很多 Markdown 編輯器直接或間接支持。 也就是說直接用現有的 Markdown 編輯器就可以上手一試了,幾乎沒有額外負擔。

這里是部分支持 Mermaid 的編輯器

  • 印象筆記 Markdown 筆記

  • 有道雲筆記(未實測,希望大家補充糾正)

  • Typora (火箭君推薦)

  • MWeb(未實測,希望大家補充糾正)

  • VSCode + Mermaid 插件

  • Atom + Mermaid 插件

  • MermaidJS 官方網頁版 編輯器

需要注意的是,由於 Mermaid 本身還在發展,並非所有特性都能被所有 Markdown 編輯器支持。不過,常見的流圖編輯模式已經比較成熟,大多被支持。至於具體渲染效果如何,我們還是要以編輯器的實際輸出為准。

流程圖

flow chart 流程圖

  • 類型名稱參數:graph

  • 方向:TD,top、down,即從上到下,有四種:LR、RL,TB、BT

  • 節點:A[Start]。A指代節點名稱,中括號里為節點內容大括號是菱形,中括號是長方形。

  • 箭頭:最少兩個短橫線,短橫線的數量代表長度。

  • 注釋:用2個豎線之間的內容為注釋,后加空格和節點名稱分開。

  • 每句結束是分號

graph LR
    A[Start] --> B{Is it?};
    B -->|Yes| C[OK];
    C --> D[Rethink];
    D --> B;
    B ---->|No| E[End];
graph LR A[Start] --> B{Is it?}; B -->|Yes| C[OK]; C --> D[Rethink]; D --> B; B ---->|No| E[End];

方向

有四種:
LR: left right,從左到右
RL:right left
TB:top bottom,從上到下,也可以是TD:top down
BT:bottom top

序列圖

sequence diagram

序列圖;時序圖

  • 類型名稱參數:sequenceDiagram

  • 參與者:participant John

  • 注釋:冒號后內容

  • 箭頭:實線箭頭->> ,虛線箭頭 -->> ,

sequenceDiagram
    participant John
    participant Alice
    Alice->>John: Hello John, how are you?
    John-->>Alice: Great!
sequenceDiagram participant John participant Alice Alice->>John: Hello John, how are you? John-->>Alice: Great!

甘特圖

  • gantt:類型名稱參數

  • title:標題

  • dateFormat:時間日期格式

  • section:部分

  • A task :a1, 2014-01-01, 30d :冒號前內容,冒號后:指代名稱,開始時間,持續時間

關鍵字 head含義
title 標題
dateFormat 日期格式
section 模塊
Completed 已經完成
Active 當前正在進行
Future 后續待處理
crit 關鍵階段
日期缺失 默認從上一項完成后
gantt
    title A Gantt Diagram
    dateFormat  YYYY-MM-DD
    
    section Section
    A task           :a1, 2021-06-01, 30d
    Another task     :after a1  , 20d
    
		section 無人船
    第一階段     :2021-06-07  , 82d
    第二階段      : 24d
gantt title A Gantt Diagram dateFormat YYYY-MM-DD section Section A task :a1, 2021-06-01, 30d Another task :after a1 , 20d section 無人船 第一階段 :2021-06-07 , 82d 第二階段 : 24d

大的例子

    gantt
    dateFormat  YYYY-MM-DD
    title 甘特圖示例

    section 開始階段
    完成任務          :done,    des1, 2014-01-06,2014-01-08
    激活任務          :active,  des2, 2014-01-09, 3d
    未來的任務        :         des3, after des2, 5d
    未來的任務2       :         des4, after des3, 5d

    section 緊急任務
    在關鍵線完成任務          :crit, done, 2014-01-06,24h
    實現解析器和JSON          :crit, done, after des1, 2d
    為解析器創建測試          :crit, active, 3d
    關鍵線的未來任務          :crit, 5d
    為渲染器創建測試          :2d
    添加到 mermaid           :1d

    section 文檔
    描述甘特語法              :active, a1, after des1, 3d
    將甘特圖添加到演示頁面     :after a1  , 20h
    向演示頁面添加另一個圖表   :doc1, after a1  , 48h

    section 最后階段
    描述甘特語法               :after doc1, 3d
    將甘特圖添加到演示頁面      : 20h
    向演示頁面添加另一個圖表    : 48h
gantt dateFormat YYYY-MM-DD title 甘特圖示例 section 開始階段 完成任務 :done, des1, 2014-01-06,2014-01-08 激活任務 :active, des2, 2014-01-09, 3d 未來的任務 : des3, after des2, 5d 未來的任務2 : des4, after des3, 5d section 緊急任務 在關鍵線完成任務 :crit, done, 2014-01-06,24h 實現解析器和JSON :crit, done, after des1, 2d 為解析器創建測試 :crit, active, 3d 關鍵線的未來任務 :crit, 5d 為渲染器創建測試 :2d 添加到 mermaid :1d section 文檔 描述甘特語法 :active, a1, after des1, 3d 將甘特圖添加到演示頁面 :after a1 , 20h 向演示頁面添加另一個圖表 :doc1, after a1 , 48h section 最后階段 描述甘特語法 :after doc1, 3d 將甘特圖添加到演示頁面 : 20h 向演示頁面添加另一個圖表 : 48h

餅狀圖

  • pie:類型名稱參數

  • title:標題

  • 數據不是百分比,原始數據計算得出百分比

pie
    title Key elements in Product X
    "Calcium" : 42.96
    "Potassium" : 50.05
    "Magnesium" : 10.01
    "Iron" :  5
		"鈉" : 10
pie title Key elements in Product X "Calcium" : 42.96 "Potassium" : 50.05 "Magnesium" : 10.01 "Iron" : 5 "鈉" : 10

節點形狀

長方形節點

長方形,中括號

graph LR
id[長方形節點];
graph LR id[長方形節點];

圓角節點

長方形圓角,小括號

graph LR
id(圓角節點);
graph LR id(圓角節點);

圓形節點

圓節點(The form of a circle)

雙小括號

graph LR
id((圓形節點));
graph LR id((圓形節點));

非對稱節點

非對稱節點(asymetric shape)

只有一半中括號

graph LR
id>非對稱節點]
graph LR id>非對稱節點]

菱形節點

菱形節點(rhombus)

大括號

graph LR
id{菱形節點}
graph LR id{菱形節點}

連接線

節點間的連接線有多種形狀,而且可以在連接線中加入標簽。

箭頭形連接

graph LR;
  A-->B;
graph LR; A-->B;

開放連接

graph LR
A --- B
graph LR A --- B

標簽連接

graph LR
A -- This is the label text --- B;
graph LR A -- This is the label text --- B;

箭頭標簽連接

graph LR
 A-- text -->B
graph LR A-- text -->B

虛線連接

(dotted link,點連線)

graph LR
A-.->B
A-.-.B
graph LR A-.->B A-.-.B

標簽虛線

graph LR
A-.text.->B
graph LR A-.text.->B

粗實線

graph LR
A==>B
A===B
graph LR A==>B A===B

標簽粗線

graph LR
A==text==>B
A==text===B
graph LR A==text==>B A==text===B

序列圖

sequenceDiagram
  participant John
  participant Alice
  Alice-xJohn:Hello John,how are you?
  John-->>Alice:Great!
sequenceDiagram   participant John   participant Alice   Alice-xJohn:Hello John,how are you?   John-->>Alice:Great!

順序

參與者(participant)的順序

participant

別名

as

participant Alice as 張三

箭頭

消息的語法:實線或者虛線的使用:

[Actor][Arrow][Actor]:Message text
Arrow的六種樣式:

  • ->:實線

  • -->:虛線

  • ->>:實線箭頭

  • -->>:虛線箭頭

  • -x:實線箭頭×

  • --x:虛線箭頭×

sequenceDiagram
    Alice->John: Hello John, how are you ?
    John-->Alice:Great!
    Alice->>John: dont borther me !
    John-->>Alice:Great!
    Alice-xJohn: wait!
    John--xAlice: Ok!
sequenceDiagram Alice->John: Hello John, how are you ? John-->Alice:Great! Alice->>John: dont borther me ! John-->>Alice:Great! Alice-xJohn: wait! John--xAlice: Ok!

便簽

給序列圖增加便簽:
具體規則:
[right of | left of | over][Actor]:Text

sequenceDiagram
  participant A
  Note left of A: 標簽內容
sequenceDiagram   participant A   Note left of A: 標簽內容

跨越兩個Actor的便簽:

sequenceDiagram
Alice->>John:Hello John, how are you?
Note over Alice,John:一個典型互動
sequenceDiagram Alice->>John:Hello John, how are you? Note over Alice,John:一個典型互動

循環

在序列圖中,也可以使用循環,具體規則如下:

Loop text
... statements...
end

示例

sequenceDiagram
  Alice->>John: Hello!
  loop 每次重復
    John->>Alice:Great!
  end
sequenceDiagram   Alice->>John: Hello!   loop 每次重復     John->>Alice:Great!   end

選擇

在序列圖中選擇的表達。規則如下:

alt Describing text
...statements...
else
...statements...
end

或者使用opt(推薦在沒有else的情況下使用)

opt Describing text
...statements...
end

示例

sequenceDiagram
participant Alice as 張三
participant Bob as 李四
		Alice->>Bob: Hello, how are you?
		alt 生病了
		Bob->>Alice:很糟糕
		else 健康的
		Bob->>Alice:清新如雛菊
		end
		opt 額外回復
		Bob->>Alice:感謝問候
		end
sequenceDiagram participant Alice as 張三 participant Bob as 李四 Alice->>Bob: Hello, how are you? alt 生病了 Bob->>Alice:很糟糕 else 健康的 Bob->>Alice:清新如雛菊 end opt 額外回復 Bob->>Alice:感謝問候 end


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM