当前位置: 首页 > news >正文

Mermaid 绘图指南(二)- 使用 Typora 与 Mermaid 绘制专业图表

Mermaid 绘图指南(二)- 使用 Typora 与 Mermaid 绘制专业图表

日期作者版本备注
2022-05-06Dog TaoV1.0发布 V1.0
- 完成文章框架搭建及流程图语法规则的详细介绍。
2025-04-24Dog TaoV1.1修改文章使其更简洁流畅,语法和格式更加统一,便于阅读和理解。

文章目录

  • Mermaid 绘图指南(二)- 使用 Typora 与 Mermaid 绘制专业图表
    • 概述
    • 流程图
      • 方向与节点
      • 连线样式
      • 连线形式
      • 子图与注释
      • 标准流程图
        • 示例1 -(竖向)
        • 示例2 - 横向
    • UML时序图
      • 简单时序图
        • 示例1
        • 示例2
      • 复杂时序图
        • 示例1
        • 示例2
        • 示例3
        • 示例4
      • 标准时序图
        • 示例1
    • 甘特图
        • 示例1
    • 类图
        • 示例1
    • 状态图
        • 示例1
    • 饼图
        • 示例1
    • 图形导出
    • 结论

概述

在技术文档编写、项目管理和系统设计领域,清晰的可视化表达往往比文字更具说服力。Typora作为一款极致简洁的Markdown编辑器,与Mermaid这一基于文本的图表渲染引擎的深度整合,为创作者提供了"代码即图表"的全新工作流。本文系统梳理了流程图、时序图、甘特图等主流图表的绘制方法,通过语法解析与案例演示,帮助读者快速掌握可视化表达的利器。

参考文章
1)使用Typora画 流程图、时序图、顺序图、甘特图、等图详解
2)Mermaid从入门到入土——Markdown进阶语法
3)史上最完美的 Typora 教程
4)B站-使用 Typora 画图,类图、流程图、时序图统统都能画

Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术,这也是与其他Markdown编辑器最显著的区别。即时渲染使得你写Markdown就想是写Word文档一样流畅自如,不像其他编辑器的有编辑栏和显示栏。Typora删除了预览窗口,以及所有其他不必要的干扰。取而代之的是实时预览。Markdown的语法因不同的解析器或编辑器而异,Typora使用的是GitHub Flavored Markdown。

Typora内置了对Mermaid的支持,才可以画各种图。使用方法:首先在 Typora 中,输入 ```mermaid 然后敲击回车,即可初始化一张空白图。在空白处输入下面的源码即可,按照mermaid语法格式来操作即可。

  • 什么是Mermaid?
    • Mermaid是一种基于Javascript的绘图工具,使用类似于Markdown的语法,使用户可以方便快捷地通过代码创建图表。
    • 项目地址:https://github.com/mermaid-js/mermaid
  • 怎么使用Mermaid?

    • 使用特定的Mermaid渲染器;
    • 使用集成了Mermaid渲染功能的Markdown编辑器,如Typora。使用时,需要将代码块的语言选择为Mermaid
  • Mermaid能绘制哪些图?

    • 饼状图:使用pie关键字,具体用法后文将详细介绍
    • 流程图:使用graph关键字,具体用法后文将详细介绍
    • 序列图:使用sequenceDiagram关键字
    • 甘特图:使用gantt关键字
    • 类图:使用classDiagram关键字
    • 状态图:使用stateDiagram关键字
    • 用户旅程图:使用journey关键字

流程图

  • 在线渲染器:Online FlowChart & Diagrams Editor

方向与节点

  • 方向:用于开头,声明流程图的方向。

    • graphgraph TBgraph TD:从上往下
    • graph BT:从下往上
    • graph LR:从左往右
    • graph RL:从右往左
  • 结点

    • 无名字的结点:直接写内容,此时结点边框为方形;节点内容不支持空格
    • 有名字的结点:节点名后书写内容,内容左右有特定符号,结点边框由符号决定;节点内容可以有空格

下面的实例中,没有为graph指定方向,因此默认是从上往下的。但是由于各个结点之前没有箭头,所以他们都处于同一排。

graph默认方形id1[方形]id2(圆边矩形)id3([体育场形])id4[[子程序形]]id5[(圆柱形)]id6((圆形))
默认方形
方形
圆边矩形
体育场形
子程序形
圆柱形
圆形
graphid1{菱形}id2{{六角形}}id3[/平行四边形/]id4[\反向平行四边形\]id5[/梯形\]id6[\反向梯形/]
菱形
六角形
平行四边形
反向平行四边形
梯形
反向梯形

连线样式

  • 实线箭头:分为无文本箭头和有文本箭头,有文本箭头有2种书写格式
graph LR
a-->b--文本1-->c-->|文本2|d
文本1
文本2
a
b
c
d
  • 粗实线箭头:分为无文本箭头和有文本箭头
graph LR
a==>b==文本==>c
文本
a
b
c
  • 虚线箭头:分为无文本箭头和有文本箭头
graph LR
a-.->b-.文本.->c
文本
a
b
c
  • 无箭头线:即以上三种连线去掉箭头后的形式
graph LR
a---b
b--文本1---c
c---|文本2|d
d===e
e==文本3===f
f-.-g
g-.文本.-h
文本1
文本2
文本3
文本
a
b
c
d
e
f
g
h
  • 其他连线:需要将graph关键字改为flowchart,除了新增加的连线形式外,上面三种线的渲染效果也会不同
flowchart LRA o--o BB <--> CC x--x D旧连线 --文本--> 也会不同
文本
A
B
C
D
旧连线
也会不同
  • 延长连线:增加相应字符即可,如下图中的B到E,连线中增加了一个-。字符可多次添加。
graph LRA[Start] --> B{Is it?};B -->|Yes| C[OK];C --> D[Rethink];D --> B;B --->|No| E[End];
Yes
No
Start
Is it?
OK
Rethink
End

连线形式

  • 直链
graph LRA -- text --> B -- text2 --> C
text
text2
A
B
C
  • 多重链:可以使用&字符,或单个描述
graph a --> b & c--> dA & B--> C & DX --> MX --> NY --> MY --> N
a
b
c
d
A
B
C
D
X
M
N
Y

子图与注释

  • 子图:需要将graph关键字改为flowchart,在代码段的开始加入subgraph,尾部加入end
flowchart TBc1-->a2subgraph onea1-->a2endsubgraph twob1-->b2endsubgraph threec1-->c2endone --> twothree --> twotwo --> c2
three
one
c2
c1
two
b2
b1
a2
a1
  • 注释:在行首加入%%即可。
graph LR
%%这是一条注释,在渲染图中不可见A[Hard edge] -->|Link text| B(Round edge)B --> C{Decision}C -->|One| D[Result one]C -->|Two| E[Result two]
Link text
One
Two
Hard edge
Round edge
Decision
Result one
Result two

标准流程图

先输入```mermaid,换行输入flowchat,然后输入下面的语法即可。

示例1 -(竖向)
```mermaid
flowchat
st=>start: 开始框
op=>operation: 处理框
cond=>condition: 判断框(是或否?)
sub1=>subroutine: 子流程
io=>inputoutput: 输入输出框
e=>end: 结束框
st->op->cond
cond(yes)->io->e
cond(no)->sub1(right)->op
```
Created with Raphaël 2.3.0 开始框 处理框 判断框(是或否?) 输入输出框 结束框 子流程 yes no
示例2 - 横向
```mermaid
flowchat
st=>start: 开始框
op=>operation: 处理框
cond=>condition: 判断框
sub1=>subroutine: 子流程
io=>inputoutput: 输入输出框
e=>end: 结束框
st(right)->op(right)->cond
cond(yes)->io(bottom)->e
cond(no)->sub1(right)->op
```
Created with Raphaël 2.3.0 开始框 处理框 判断框 输入输出框 结束框 子流程 yes no

UML时序图

时序图(Sequence Diagram),亦称为序列图、循序图或顺序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。时序图是一个二维图,横轴表示对象,纵轴表示时间,消息在各对象之间横向传递,依照时间顺序纵向排列。

时序图的作用是展示对象之间交互的顺序。将交互行为建模为消息传递,通过描述消息是如何在对象间发送和接收的来动态展示对象之间的交互;相对于其他UML图,时序图更强调交互的时间顺序,可以直观的描述并发进程。

UML时序图介绍文档: 快速学习时序图:时序图简介、画法及实例

  • 先输入```mermaid (或)sequence
  • 使用sequenceDiagram 则不使用sequence
  • ->> 代表实线箭头,–>> 则代表虚线箭头
  • -> 直线,–>虚线

简单时序图

示例1
```mermaid
sequenceDiagram 
客户->>银行柜台: 我要存钱  
银行柜台->>后台: 改一下这个账户数字哦  
后台->>银行柜台: 账户的数字改完了,明天起息  
银行柜台->>客户: 好了,给你回单 ,下一位
```
客户 银行柜台 后台 我要存钱 改一下这个账户数字哦 账户的数字改完了,明天起息 好了,给你回单 ,下一位 客户 银行柜台 后台 时序图例子
示例2
```mermaid
sequenceDiagram对象A->>对象B:对象B你好吗(请求)Note right of 对象B:对象B的描述(提示)Note left of 对象A:提示对象B-->>对象A:我很好(响应)对象A->>对象B:你确定?
```
对象A 对象B 对象B你好吗(请求) 对象B的描述(提示) 提示 我很好(响应) 你确定? 对象A 对象B 时序图例子

复杂时序图

示例1
```mermaid
sequenceDiagramtitle:标题:复杂使用对象A->>对象B:对象B你好吗(请求)Note right of 对象B:对象B的描述(提示)Note left of 对象A:提示对象B-->>对象A:我很好(响应)对象B->>对象C:你好吗?对象C-->>对象A: B找我了对象A->>对象B:你确定?note over 对象C,对象B:朋友participant Dnote right of D:没人陪我
```
对象A 对象B 对象C D 对象B你好吗(请求) 对象B的描述(提示) 提示 我很好(响应) 你好吗? B找我了 你确定? 朋友 没人陪我 对象A 对象B 对象C D 标题:复杂使用
示例2
```mermaid
sequenceDiagramparticipant Aparticipant Bparticipant CA->>C:helloloop healthC->>C:no endNote right of C:you should eat<br/> doctorB-->>A:niceC->>B:how are you?B-->>C:great
```
A B C hello no loop [health] you should eat doctor nice how are you? great A B C 标题:复杂使用
示例3
```mermaid
sequenceDiagramparticipant Aparticipant Bparticipant Cparticipant Dtitle:"练习时序图"A->>B:requestB->>B:verify signB->>C:123C-->>B:321B->>C:456C->>C:codeC->>D:789D-->>B:987alt yesNote right of B:yes的结果else noB-->>D:loginD-->>B:login successendB->>B:加密B-->>A:return 
```
A B C D request verify sign 123 321 456 code 789 987 yes的结果 login login success alt [yes] [no] 加密 return A B C D "练习时序图"
示例4
```mermaid
sequenceDiagramtitle:时序图例子Alice->>Alice:自言自语Alice-->>John:hello john,%% over 可以用于单独一个角色上,也可以用于相邻的两个角色间:note over Alice,John:friend%% loop 后跟循环体说明文字loop healthcheckJohn-->>John:Fight agaist hypochondraendnote right of John: RationalJohn-->>Alice:Great!John->>Bob:How about you?%% 控制焦点:用来表示时序图中对象执行某个操作的一段时间%% activate 角色名:表示激活控制焦点activate BobBob-->>John:Jolly good!%% deactivate 角色名 表示控制焦点结束deactivate BobAlice->>+Bob: Hello Bob, how are you?rect rgb(175, 255, 212)alt is sickBob-->>Alice: Not so good :(else is wellBob-->>Alice: Feeling fresh like a daisyendopt Extra responseBob-->>Alice: Thanks for askingendendloop communicatingAlice->>+John: asking some questionsJohn-->>-Alice: answer endpar Alice to JohnAlice->>John: Byeand Alice to BobAlice->>Bob: ByeendAlice-xJohn: 这是一个异步调用Alice--xBob: 这是一个异步调用
```
Alice John Bob 自言自语 hello john, friend Fight agaist hypochondra loop [healthcheck] Rational Great! How about you? Jolly good! Hello Bob, how are you? Not so good :( Feeling fresh like a daisy alt [is sick] [is well] Thanks for asking opt [Extra response] asking some questions answer loop [communicating] Bye Bye par [Alice to John] [Alice to Bob] 这是一个异步调用 这是一个异步调用 Alice John Bob 时序图例子

标准时序图

示例1
```mermaid
%% 时序图例子,-> 直线,-->虚线,->>实线箭头sequenceDiagramparticipant 张三participant 李四张三->王五: 王五你好吗?loop 健康检查王五->王五: 与疾病战斗endNote right of 王五: 合理 食物 <br/>看医生...李四-->>张三: 很好!王五->李四: 你怎么样?李四-->王五: 很好!A
```
张三 李四 王五 王五你好吗? 与疾病战斗 loop [健康检查] 合理 食物 看医生... 很好! 你怎么样? 很好!A 张三 李四 王五 时序图例子

甘特图

示例1
```mermaidganttdateFormat  YYYY-MM-DDtitle 软件开发甘特图section 设计需求                      :done,    des1, 2014-01-06,2014-01-08原型                      :active,  des2, 2014-01-09, 3dUI设计                     :         des3, after des2, 5d未来任务                     :         des4, after des3, 5dsection 开发学习准备理解需求                      :crit, done, 2014-01-06,24h设计框架                             :crit, done, after des2, 2d开发                                 :crit, active, 3d未来任务                              :crit, 5d耍                                   :2dsection 测试功能测试                              :active, a1, after des3, 3d压力测试                               :after a1  , 20h测试报告                               : 48h
```
2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 2014-01-23 需求 学习准备理解需求 原型 UI设计 设计框架 开发 未来任务 未来任务 功能测试 压力测试 测试报告 设计 开发 测试 软件开发甘特图

类图

语法解释:<|-- 表示继承,+ 表示 public- 表示 private,学过 Java 的应该都知道。

示例1
```mermaid
classDiagramAnimal <|-- DuckAnimal <|-- FishAnimal <|-- ZebraAnimal : +int ageAnimal : +String genderAnimal: +isMammal()Animal: +mate()class Duck{+String beakColor+swim()+quack()}class Fish{-int sizeInFeet-canEat()}class Zebra{+bool is_wild+run()}
```
Animal
+int age
+String gender
+isMammal()
+mate()
Duck
+String beakColor
+swim()
+quack()
Fish
-int sizeInFeet
-canEat()
Zebra
+bool is_wild
+run()

状态图

示例1
```mermaid
stateDiagram[*] --> s1s1 --> [*]
```
s1

饼图

  • pie关键字开始图表
  • 然后使用title关键字及其在字符串中的值,为饼图赋予标题(这是可选的)
  • " "内写上分区名。
  • 分区名后使用:作为分隔符
  • 分隔符后写上数值,最多支持2位小数——数据会以百分比的形式展示
示例1
```mermaid
pietitle Key elements in Product X"Calcium" : 42.96"Potassium" : 50.05"Magnesium" : 10.01"Iron" :  5
```
40% 46% 9% 5% Key elements in Product X Calcium Potassium Magnesium Iron

图形导出

绘制好的图片可以选择菜单/文件/导出,导出为图片或者网页格式。在网页中图片是以 SVG 格式渲染的,你可以复制 SVG 内容,导入到SVG的图片编辑器中进一步操作。
导出成网页类型,再使用浏览器打开,如下所示:

img

结论

随着数字化协作的深入发展,兼具专业性与易用性的文档工具已成为职场核心竞争力。TyporaMermaid的珠联璧合,为技术写作开辟了"代码化绘图"的新范式。通过本文的语法详解与案例实践,我们见证了从简单流程图到多层甘特图、从基础时序图到复杂类图的完整实现路径。这种以纯文本构建可视化内容的方式,不仅使图表具备版本控制的可追踪性,更通过跨平台渲染能力确保了文档的持久可用性。

参考文章
1)使用 Typora之画图
2)快速学习时序图:时序图简介、画法及实例
3)UML时序图(Sequence Diagram)学习笔记
4)开源 画图_使用 Typora 画图(类图、流程图、时序图)

相关文章:

  • Qt 使用 MySQL 数据库的基本方法
  • redis集群的三种部署方式
  • 《ATPL地面培训教材13:飞行原理》——第1章:概述与定义
  • unity Animation学习,精准控制模型动画播放
  • Android PackageManagerService(PMS)框架深度解析
  • [创业之路-386]:企业法务 - 知识产权的刑事风险
  • 2025年3月电子学会青少年机器人技术(四级)等级考试试卷-理论综合
  • SpringBoot入门实战(第八篇:项目接口-订单管理)完结篇
  • 第九节:性能优化高频题-首屏加载优化策略
  • 类和对象(构造函数和析构函数)
  • 修改RK3568 UBUNTU开机画面
  • Python实现异步编程的重要方式【协程(Coroutine)函数】(内含详细案例)
  • win11中wsl在自定义位置安装ubuntu20.04 + ROS Noetic
  • 将视频生成视频二维码步骤
  • Python协程详解:从基础到实战
  • 技巧-多数元素
  • 软件开发过程通常包含多个阶段,结合 AI 应用,可规划出以下 Markdown 文件名称的资料来记录各阶段内容
  • 深度强化学习的AI智能体实战:从训练到部署全流程解析
  • 码上云端·实战征文|无需邀请码,OpenManus深度测评
  • Python中的 for 与 迭代器
  • 欢迎回家!日本和歌山县4只大熊猫将于6月底送返中国
  • 韩国检方重启调查金建希操纵股价案
  • 专访倪军:人要有终身学习能力,一张文凭无法像以往支撑那么多年
  • 王宝强谈《棋士》:饰演这个灰度人物有一种被割裂的痛苦
  • 央行上海总部答澎湃:上海辖内金融机构已审批通过股票回购增持贷款项目117个
  • 用一生走丝路,91岁艺术家耿玉琨的书旅奇遇