概述:Mermaid
Mermaid
是一种基于Javascript的、开源 的文本驱动图表生成工具/绘图工具 ,,使用类似于Markdown的低代码语法,它允许用户使用简单的文本语言来创建各种类型的图表,如流程图、时序图、甘特图和饼状图等。
Mermaid
可以作为JavaScript
库或独立的命令行工具使用,支持在HTML、Markdown或AsciiDoc文档中嵌入图表定义。
Mermaid的主要绘制功能
Mermaid能绘制哪些图?
- 饼状图:使用
pie
关键字,具体用法后文将详细介绍 - 流程图:使用
graph
关键字,具体用法后文将详细介绍 - 序列图:使用
sequenceDiagram
关键字 - 甘特图:使用
gantt
关键字 - 类图:使用
classDiagram
关键字 - 状态图:使用
stateDiagram
关键字 - 用户旅程图:使用
journey
关键字
Mermaid的基本用法
- 在
HTML
或Markdown
文件中引用Mermaid
库和Mermaid CSS
样式表。
- 使用
Mermaid
的CLI
工具在命令行中生成图表。- 使用
Mermaid
的API
在自己的应用程序中生成图表。
Mermaid的语法基础
-
Mermaid
的语法类似于Markdown
,易于学习和使用。以下是一些基本的语法示例: -
定义节点
id[文字](矩形节点),id((文字))(圆角矩形节点),id>文字](旗帜状节点),id{文字}(菱形节点), ...
- 定义连线:
->(添加尾部箭头),--(单线),==(粗线),-.(虚线), ...
Mermaid的高级功能和使用场景
Mermaid
支持自定义部署,可以通过调用API在应用程序中使用。- 它还可以与AI结合,实现一键生成图表的功能。
Mermaid
的优点 在于其简单性 和可移植性 ,用户可以轻松地将图表定义嵌入到任何支持HTML
、Markdown
或AsciiDoc
的文档中。
支持工具与集成
Mermaid 官网(支持免登录、在线绘制)
可能需要挂梯子
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209192905618-1599552776.png)
Markdown
文档中集成Mermaid
-
mermaid
的语法为代码块语法 的执行功能,语言为mermaid
-
示例
txt
'''mermaid!
# 注意,为此处展示需要,需要将3个'符号转为3个`符号
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
'''
效果:
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209185032531-506698797.png)
Obsidian 支持 Mermaid
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209194950065-41690649.png)
txt
'''mermaid!
graph LR
%%这是一条注释,在渲染图中不可见
A[Hard edge] -->|Link text| B(Round edge)
B --> C{Decision}
C -->|One| D[Result one]
C -->|Two| E[Result two]
'''
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209195258333-1311549900.png)
- 相关文献
设置 > 外观 > 向下滚动到 CSS 代码片段 > 点击右侧的文件夹图标,打开 snippets 文件夹
Tyora 支持 Mermaid
- Typora(一款美观的
Markdown
编辑器)支持以下代码块画流程图
flow
:流程图,会自动被flowchart.js
渲染。sequence
:序列图,会自动被js-sequence
解析和渲染mermaid
:mermaid
图。
- 要使
Typora
支持代码绘图 ,需要对Typora
软件进行相应设置:
- 【
文件
】-【偏好设置...
】-【Markdown
】-【Markdown扩展语法
】:启用图表 (序列图、流程图和Marmaid图)- 并重启
Typora
生效。
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209185944808-1417907096.png)
- 当
Typora
将Markdown
文档导出为HTML
、PDF
、epub
、docx
文件格式时,相关渲染图 也将包括在内;但是当Typora
将Markdown
导出为当前版本的其他文件格式 时,相关渲染图将不包括在内。
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209190333082-604528971.png)
txt
'''mermaid!
# 注意,为此处展示需要,需要将3个'符号转为3个`符号
graph LR
Start --> Stop
'''
'''mermaid
graph LR
A[方形] -->B(圆角)
B --> C{条件a}
C -->|a=1| D[结果1]
C -->|a=2| E[结果2]
F[横向流程图]
'''
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209190429239-2124871598.png)
Mermaid的语法与经典案例
CASE:朱元璋家谱简图
txt
graph LR
emperor((朱八八))-.子.->朱五四-.子.->朱四九-.子.->朱百六
朱雄英--长子-->朱标--长子-->emperor
emperor2((朱允炆))--次子-->朱标
朱樉--次子-->emperor
朱棡--三子-->emperor
emperor3((朱棣))--四子-->emperor
emperor4((朱高炽))--长子-->emperor3
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209193359943-1764971520.png)
CASE:饼图
- 在线渲染器:
- Online FlowChart & Diagrams Editor
- 语法 ------ 仅供参考,建议直接看实例
- 从
pie
关键字开始图表- 然后,使用
title
关键字及其在字符串中的值,为饼图赋予标题。(这是可选的)- 数据部分
- 在
" "
内写上分区名。- 分区名后使用
:
作为分隔符- 分隔符 后写上数值 ,最多支持
2
位小数------数据会以百分比的形式展示
- 实例
txt
pie
title 为什么总是宅在家里?
"喜欢宅" : 15
"天气太热或太冷" : 20
"穷" : 500
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209193635171-689578082.png)
CASE: 流程图
txt
graph LR
A[Start] --> B{Is it?};
B -- Yes --> C[OK];
C --> D[Rethink];
D --> B;
B -- No ----> E[End];
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209193803232-719393819.png)
方向
- 方向:用于开头,声明流程图的方向。
graph
或graph TB
或graph TD
:从上往下graph BT
:从下往上graph LR
:从左往右graph RL
:从右往左
节点
- 无名字的节点:直接写内容,此时结点边框为方形;节点内容不支持空格
- 有名字的节点:节点名后书写内容,内容左右有特定符号,结点边框由符号决定;节点内容可以有空格
下面的实例中,没有为
graph
指定方向,因此默认是从上往下的。但是由于各个结点之前没有箭头,所以他们都处于同一排。id1-id6是节点名,可随意定义。
txt
graph
默认方形
id1[方形]
id2(圆边矩形)
id3([体育场形])
id4[[子程序形]]
id5[(圆柱形)]
id6((圆形))
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209194020880-2009336032.png)
txt
graph
id1{菱形}
id2{{六角形}}
id3[/平行四边形/]
id4[\反向平行四边形\]
id5[/梯形\]
id6[\反向梯形/]
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209194040357-354521937.png)
连线样式
- 实线箭头:分为无文本箭头和有文本箭头,有文本箭头有2种书写格式
txt
graph LR
a-->b--文本1-->c-->|文本2|d
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209194209906-11660343.png)
- 粗实线箭头:分为无文本箭头和有文本箭头
txt
graph LR
a==>b==文本==>c
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209194242920-1608882514.png)
- 虚线箭头:分为无文本箭头和有文本箭头
txt
graph LR
a-.->b-.文本.->c
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209194307867-478415477.png)
- 无箭头线:即以上三种连线去掉箭头后的形式
txt
graph LR
a---b
b--文本1!---c
c---|文本2|d
d===e
e==文本3===f
f-.-g
g-.文本.-h
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209194328510-389610718.png)
- 其他连线:需要将
graph
关键字改为flowchart
,除了新增加的连线形式外,上面三种线的渲染效果也会不同
txt
flowchart LR
A o--o B
B <--> C
C x--x D
旧连线 --文本--> 也会不同
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209194359086-1237581799.png)
- 延长连线:增加相应字符即可,如下图中的B到E,连线中增加了一个
-
。字符可多次添加。
txt
graph LR
A[Start] --> B{Is it?};
B -->|Yes| C[OK];
C --> D[Rethink];
D --> B;
B --->|No| E[End];
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209194425308-1183342202.png)
连线形式
- 直链
txt
graph LR
A -- text --> B -- text2 --> C
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209194503230-155242876.png)
- 多重链:可以使用
&
字符,或单个描述
txt
graph
a --> b & c--> d
A & B--> C & D
X --> M
X --> N
Y --> M
Y --> N
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209194528582-1915792664.png)
注释
- 注释:在行首加入
%%
即可。
txt
graph LR
%%这是一条注释,在渲染图中不可见
A[Hard edge] -->|Link text| B(Round edge)
B --> C{Decision}
C -->|One| D[Result one]
C -->|Two| E[Result two]
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209194701989-1936692599.png)
其他
- 子图:需要将
graph
关键字改为flowchart
,在代码段的开始加入subgraph
,尾部加入end
txt
flowchart TB
c1-->a2
subgraph one
a1-->a2
end
subgraph two
b1-->b2
end
subgraph three
c1-->c2
end
one --> two
three --> two
two --> c2
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209194603733-2064506386.png)
Y 推荐资源
mermaid 【推荐】
- mermaid
2025.02.09 : 6.9k fork / 75.4k star
Slogan : 以类似于标记的方式从文本生成流程图或序列图
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209192030622-524721558.png)
flow
- flow
2025.02.09 : 1.2k fork / 8.6k star
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209192232666-1517608776.png)
sequence.js
- sequence.js
2025.02.09 : 1.1k fork / 7.8k star
![](https://img2024.cnblogs.com/blog/1173617/202502/1173617-20250209192522318-1181313219.png)
X 参考文献
流程图 / UML时序图 / 甘特图 /