[图形绘制/流程图] Mermaid : 开源的低代码图形绘制语言、协议及工具
概述: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 官网(支持免登录、在线绘制)
可能需要挂梯子

Markdown文档中集成Mermaid
mermaid的语法为代码块语法的执行功能,语言为mermaid示例
'''mermaid!
# 注意,为此处展示需要,需要将3个'符号转为3个`符号
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
'''
效果:

Obsidian 支持 Mermaid

'''mermaid!
graph LR
%%这是一条注释,在渲染图中不可见
A[Hard edge] -->|Link text| B(Round edge)
B --> C{Decision}
C -->|One| D[Result one]
C -->|Two| E[Result two]
'''

- 相关文献
设置 > 外观 > 向下滚动到 CSS 代码片段 > 点击右侧的文件夹图标,打开 snippets 文件夹
Tyora 支持 Mermaid
- Typora(一款美观的
Markdown编辑器)支持以下代码块画流程图
flow:流程图,会自动被flowchart.js渲染。sequence:序列图,会自动被js-sequence解析和渲染mermaid:mermaid图。
- 要使
Typora支持代码绘图,需要对Typora软件进行相应设置:
- 【
文件】-【偏好设置…】-【Markdown】-【Markdown扩展语法】:启用图表 (序列图、流程图和Marmaid图)- 并重启
Typora生效。

- 当
Typora将Markdown文档导出为HTML、PDF、epub、docx文件格式时,相关渲染图也将包括在内;但是当Typora将Markdown导出为当前版本的其他文件格式时,相关渲染图将不包括在内。

'''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[横向流程图]
'''

Mermaid的语法与经典案例
CASE:朱元璋家谱简图
graph LR
emperor((朱八八))-.子.->朱五四-.子.->朱四九-.子.->朱百六
朱雄英--长子-->朱标--长子-->emperor
emperor2((朱允炆))--次子-->朱标
朱樉--次子-->emperor
朱棡--三子-->emperor
emperor3((朱棣))--四子-->emperor
emperor4((朱高炽))--长子-->emperor3

CASE:饼图
- 在线渲染器:
- Online FlowChart & Diagrams Editor
- 语法 —— 仅供参考,建议直接看实例
- 从
pie关键字开始图表- 然后,使用
title关键字及其在字符串中的值,为饼图赋予标题。(这是可选的)- 数据部分
- 在
" "内写上分区名。- 分区名后使用
:作为分隔符- 分隔符后写上数值,最多支持
2位小数——数据会以百分比的形式展示
- 实例
pie
title 为什么总是宅在家里?
"喜欢宅" : 15
"天气太热或太冷" : 20
"穷" : 500

CASE: 流程图
graph LR
A[Start] --> B{Is it?};
B -- Yes --> C[OK];
C --> D[Rethink];
D --> B;
B -- No ----> E[End];

方向
- 方向:用于开头,声明流程图的方向。
graph或graph TB或graph TD:从上往下graph BT:从下往上graph LR:从左往右graph RL:从右往左
节点
- 无名字的节点:直接写内容,此时结点边框为方形;节点内容不支持空格
- 有名字的节点:节点名后书写内容,内容左右有特定符号,结点边框由符号决定;节点内容可以有空格
下面的实例中,没有为
graph指定方向,因此默认是从上往下的。但是由于各个结点之前没有箭头,所以他们都处于同一排。id1-id6是节点名,可随意定义。
graph
默认方形
id1[方形]
id2(圆边矩形)
id3([体育场形])
id4[[子程序形]]
id5[(圆柱形)]
id6((圆形))

graph
id1{菱形}
id2{{六角形}}
id3[/平行四边形/]
id4[\反向平行四边形\]
id5[/梯形\]
id6[\反向梯形/]

连线样式
- 实线箭头:分为无文本箭头和有文本箭头,有文本箭头有2种书写格式
graph LR
a-->b--文本1-->c-->|文本2|d

- 粗实线箭头:分为无文本箭头和有文本箭头
graph LR
a==>b==文本==>c

- 虚线箭头:分为无文本箭头和有文本箭头
graph LR
a-.->b-.文本.->c

- 无箭头线:即以上三种连线去掉箭头后的形式
graph LR
a---b
b--文本1!---c
c---|文本2|d
d===e
e==文本3===f
f-.-g
g-.文本.-h

- 其他连线:需要将
graph关键字改为flowchart,除了新增加的连线形式外,上面三种线的渲染效果也会不同
flowchart LR
A o--o B
B <--> C
C x--x D
旧连线 --文本--> 也会不同

- 延长连线:增加相应字符即可,如下图中的B到E,连线中增加了一个
-。字符可多次添加。
graph LR
A[Start] --> B{Is it?};
B -->|Yes| C[OK];
C --> D[Rethink];
D --> B;
B --->|No| E[End];

连线形式
- 直链
graph LR
A -- text --> B -- text2 --> C

- 多重链:可以使用
&字符,或单个描述
graph
a --> b & c--> d
A & B--> C & D
X --> M
X --> N
Y --> M
Y --> N

注释
- 注释:在行首加入
%%即可。
graph LR
%%这是一条注释,在渲染图中不可见
A[Hard edge] -->|Link text| B(Round edge)
B --> C{Decision}
C -->|One| D[Result one]
C -->|Two| E[Result two]

其他
- 子图:需要将
graph关键字改为flowchart,在代码段的开始加入subgraph,尾部加入end
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

Y 推荐资源
mermaid 【推荐】
- mermaid
2025.02.09 : 6.9k fork / 75.4k star
Slogan : 以类似于标记的方式从文本生成流程图或序列图

flow
- flow
2025.02.09 : 1.2k fork / 8.6k star

sequence.js
- sequence.js
2025.02.09 : 1.1k fork / 7.8k star

X 参考文献
流程图 / UML时序图 / 甘特图 /
[图形绘制/流程图] Mermaid : 开源的低代码图形绘制语言、协议及工具的更多相关文章
- 2022了你还不会『低代码』?数据科学也能玩转Low-Code啦! ⛵
作者:韩信子@ShowMeAI 数据分析实战系列:http://www.showmeai.tech/tutorials/40 机器学习实战系列:http://www.showmeai.tech/tut ...
- 程序员为什么害怕低代码?ZT
转自:https://www.jianshu.com/p/cd89fe94cd30 低代码 是一种近些年兴起的企业软件快速开发技术和工具.借助低代码使用者无需编码即可完成企业应用的常用功能,少量编码扩 ...
- 企业应用开发的大趋势,65%的应用开发将通过低代码完成 ZT
全球知名的咨询公司Gartner于近日发表了最新版的<低代码开发平台魔力象限>,并在报告中指出,到2024年65%的应用开发工作都将通过低代码的方式完成.Gartner长期关注软件开发领域 ...
- 开源低代码平台开发实践二:从 0 构建一个基于 ER 图的低代码后端
前后端分离了! 第一次知道这个事情的时候,内心是困惑的. 前端都出去搞 SPA,SEO 们同意吗? 后来,SSR 来了. 他说:"SEO 们同意了!" 任何人的反对,都没用了,时代 ...
- rtvue-lowcode:一款基于uniapp框架和uview组件库的开源低代码开发平台
rtvue-lowcode低代码开发平台 rtvue-lowcode一款基于uniapp框架和uview组件库的低代码开发平台,项目提供可视化拖拽编辑器,采用MIT开源协议,适用于app.小程序等项目 ...
- 开源低代码开发平台entfrm2.1.0更新
开源低代码开发平台entfrm2.1.0更新 新功能 代码生成支持主子表,支持预览: 新增多应用顶部菜单与左侧菜单联动: element-ui升级到2.15.1: 新增表单管理,集成avue-from ...
- 什么是低代码(Low-Code)?
阿里云 云原生应用研发平台EMAS 彭群(楚衡) 一.前言 如果选择用一个关键词来代表即将过去的2020年,我相信所有人都会认同是"新冠".疫情来得太快就像龙卷风,短短数月就阻断了 ...
- 基于BPM的低代码开发平台应具备什么功能
一个BPM平台应该具备什么样的功能 用户在选型BPM软件的时候往往不知道该关注哪些功能,什么样的BPM软件能满足国内企业应用需求,笔者从多年BPM研发和实施经验提炼了中国特色BPM应该具备的功能 ...
- 图扑软件 3D 组态编辑器,低代码零代码构建数字孪生工厂
行业背景 随着中国制造 2025 计划的提出,新一轮的工业改革拉开序幕.大数据积累的指数级增长为智能商业爆发奠定了良好的基础,传统制造业高污染.高能耗.低效率的生产模式已不符合现代工业要求. 图扑拖拽 ...
- 转+更新 Graphviz 教程,例子+ 高级应用 写代码,编程绘制架构图(分层拓扑图) 转自官网
1. Graphviz介绍 Graphviz是大名鼎鼎的贝尔实验室的几位牛人开发的一个画图工具. 它的理念和一般的“所见即所得”的画图工具不一样,是“所想即所得”. Graphviz提供了dot语言来 ...
随机推荐
- Java网络编程之JavaMail发送邮件和接受邮件
JavaMail是API 是一个标准的Java扩展,它是J2EE的范畴,在J2EE开发过程中可能会需要用到这个API.在学习JavaMail之前,有必须要对现在的互联网的邮件协议进行有个大体的了解. ...
- ZCMU-1156
思路: 要改变的是一个范围的情况,所以正常情况下会超时. 查阅后知道应该用一个叫做树状数组的结构. 查阅和树状数组的后续情况 这个也不错 注意: 我没怎么看懂,可能没太仔细看. 树状数组当中存在的是前 ...
- 使用七牛云上传文件报错incorrect region, please use up-z1.qiniup.com-迷恋自留地
最近用Git提交代码时,一直报如标题所示的错误.百度了很多都无法解决,包括改更改配置,SSh等.最后在一个论坛上,说可能之前输入的账号或密码有误.尝试后,完美解决. 解决方法: 找到如下图的位置: 可 ...
- dotnet core微服务框架Jimu ~部署和调用演示
首先运行 consul 下载 consul 以开发模式运行 consul agent -dev 2. 调试 用 Visual Studio 2022 IDE 打开项目: 右击解决方案-选择" ...
- 【Amadeus原创】本地安装gitlab,初始化管理员密码
注册还是无法登录,最后发现,需要初始化root密码. docker exec进去,然后执行gitLab-rails,修改密码, 然后登录即可. [root@ecs-9684 ~]# docker ex ...
- 配置 HTTP/HTTPS 网络代理
使用Docker的过程中,因为网络原因,通常需要使用 HTTP/HTTPS 代理来加速镜像拉取.构建和使用.下面是常见的三种场景. 为 dockerd 设置网络代理 "docker pu ...
- 时间轮在 Netty , Kafka 中的设计与实现
本文基于 Netty 4.1.112.Final , Kafka 3.9.0 版本进行讨论 在业务开发的场景中,我们经常会遇到很多定时任务的需求.比如,生成业务报表,周期性对账,同步数据,订单支付超时 ...
- Qt/C++编写视频监控系统82-自定义音柱显示
一.前言 通过音柱控件实时展示当前播放的声音产生的振幅的大小,得益于音频播放组件内置了音频振幅的计算,可以动态开启和关闭,开启后会对发送过来的要播放的声音数据,进行运算得到当前这个音频数据的振幅,类似 ...
- Failed to run MSBuild command 错误问题解决
场景:提示:这里简述项目相关背景: CMake 报错 CMake ERROR Failed to run MSBuild command: MSBuild.exe.如下图所示: 问题描述提示:这里描述 ...
- [转]OpenLayers基于Vue项目的搭建
主要内容上次介绍了什么是OpenLayers以及其他的可以GIS工具,这次说说如何基于Vue搭建OpenLayers的项目,并且实现地图的加载. 一.vue项目搭建1.全局安装vue-cil npm ...