Markdown 文本绘图全攻略,让技术文档生动起来

大家好!今天我们来聊聊每个程序员和技术写作者都应该掌握的一项技能——用Markdown绘制图表。
你是否也遇到过这些困扰?
- 想画流程图却要打开专业软件,操作复杂
- 技术文档中的图表无法进行版本控制
- 团队协作时图表修改同步困难
- 图表与文档分离,维护成本高
今天就来介绍用Markdown绘制图表的三大神器,让你的技术文档既专业又高效!
第一部分:三大主流文本绘图工具全方位对比
| 工具 | 学习难度 | 功能强大程度 | 适用场景 | 平台支持 | 特色 |
|---|---|---|---|---|---|
| Mermaid | ⭐⭐ | ⭐⭐⭐⭐ | 通用文档 | 广泛 | 语法简洁,图表类型丰富 |
| PlantUML | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 软件设计 | 中等 | 完整UML支持,专业性强 |
| Graphviz | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 复杂图形 | 中等 | 布局算法强大,高度定制 |
第二部分:三大主流文本绘图工具语法详解
(一)Mermaid - 最受欢迎的通用图表工具
核心优势:
- 语法简洁:类似伪代码的文本定义,例如 graph TD; A–>B 即可生成流程图。
- 多场景支持:覆盖流程图、时序图、甘特图、类图、饼图等 10+ 图表类型。
- 动态渲染:浏览器或编辑器实时渲染为 SVG 矢量图,支持导出多种格式。
适用场景:
- 技术文档、项目规划、会议记录等需要快速可视化流程的场景。
优缺点总结:
✅ 语法简单易学 | ✅ 平台支持广泛 | ✅ 图表类型丰富
❌ 专业UML支持有限 | ❌ 复杂布局控制较弱
Mermaid 流程图 (Flowchart)
用于展示算法步骤、业务流程和决策逻辑,适合表达步骤间的流向关系。
语法说明:
- 方向:TD(上到下)、LR(左到右)
- 节点:A[文本] 矩形,A(文本) 圆角矩形
- 连接:–> 实线,-.-> 虚线,==>粗线
``` mermaid
graph TD
A[开始] --> B{条件判断}
B -->|Yes| C[执行操作A]
B -->|No| D[执行操作B]
C --> E[结束]
D --> E
```
渲染效果如下:

Mermaid 序列图 (Sequence Diagram)
用于描述系统组件间的时序交互和消息传递,特别适合展示API调用链路。
语法说明:
- 参与者:participant 定义角色
- 消息:->> 同步,–>> 异步/返回
```mermaid
sequenceDiagram
participant A as 用户
participant B as 系统
participant C as 数据库
A->>B: 登录请求
B->>C: 验证用户信息
C-->>B: 返回验证结果
B-->>A: 登录成功/失败
```
渲染效果如下:

Mermaid 类图 (Class Diagram)
用于展示面向对象设计中的类结构和关系,适合软件架构和系统设计说明。
语法说明:
- 类定义:class 类名 { 属性; 方法 }
- 关系:<|-- 继承,–> 关联,–* 组合
```mermaid
classDiagram
class 用户 {
+用户名: string
+密码: string
+登录()
}
class 订单 {
+订单号: int
+创建日期: date
+计算总价()
}
用户 "1" --> "n" 订单
```
渲染效果如下:

Mermaid 状态图 (State Diagram)
用于描述对象或系统的状态变化过程,适合展示状态机和工作流转换。
语法说明:
- 初始状态:[*]
- 状态转换:状态A --> 状态B : 触发条件
```mermaid
stateDiagram-v2
[*] --> 待机状态
待机状态 --> 运行状态: 启动
运行状态 --> 暂停状态: 暂停
暂停状态 --> 运行状态: 继续
运行状态 --> 停止状态: 停止
暂停状态 --> 停止状态: 停止
停止状态 --> [*]
state 运行状态 {
[*] --> 初始化
初始化 --> 处理中
处理中 --> 完成
完成 --> [*]
}
```
渲染效果如下:

Mermaid 甘特图 (Gantt Chart)
用于项目管理和进度规划,可视化任务时间安排和依赖关系。
语法说明:
- 日期格式:YYYY-MM-DD
- 任务状态:done 完成,active 进行中
```mermaid
gantt
title 项目开发计划
dateFormat YYYY-MM-DD
section 设计阶段
需求分析 :done, des1, 2024-01-01,2024-01-15
UI设计 :active, des2, 2024-01-10, 30d
section 开发阶段
前端开发 : dev1, after des2, 45d
后端开发 : dev2, 2024-02-01, 60d
section 测试阶段
单元测试 : test1, after dev1, 15d
集成测试 : test2, after dev2, 10d
```
渲染效果如下:

Mermaid 饼图 (Pie Chart)
用于展示数据的占比关系和分布情况,适合统计数据可视化。
语法说明:
- 简单键值对形式定义各部分占比
```mermaid
pie
title 浏览器市场份额
"Chrome" : 65
"Safari" : 15
"Firefox" : 10
"其他" : 10
```
渲染效果如下:

(二)PlantUML(专业的UML)
核心优势:
- UML 全支持:支持类图、时序图、用例图等 UML 标准图表,语法严谨且功能强大。
- 集成性强:通过插件可在 GitLab、VS Code 中直接渲染,支持与 Jira、Confluence 等工具协作。
- 扩展性高:支持自定义样式和模板,适合企业级建模需求。
适用场景:软件开发设计、系统架构文档、学术论文等需要专业 UML 图的场景。
PlantUML 时序图 (Sequence Diagram)
时序图用于描述对象之间交互的时间顺序,非常适合展示系统组件间的调用关系。
```plantuml
@startuml
actor 用户
participant "前端" as UI
participant "后端" as API
database 数据库
用户 -> UI: 输入用户名密码
UI -> API: 发送登录请求
API -> 数据库: 查询用户信息
数据库 --> API: 返回用户数据
API -> API: 验证密码
API --> UI: 返回登录结果
UI --> 用户: 显示登录结果
@enduml
```
渲染效果如下:

PlantUML 类图 (Class Diagram)
类图用于展示系统中类的结构和关系,是面向对象设计的重要工具。
```plantuml
@startuml
class 用户 {
-username: String
-password: String
+login(): Boolean
+logout(): void
}
class 订单 {
-orderId: Long
-amount: Double
-createTime: Date
+calculateTotal(): Double
}
class 商品 {
-productId: Long
-name: String
-price: Double
}
用户 "1" -- "n" 订单
订单 "1" -- "n" 商品
@enduml
```
渲染效果如下:

PlantUML 用例图 (Use Case Diagram)
用例图用于描述系统功能和用户角色之间的关系,常用于需求分析阶段。
```plantuml
@startuml
left to right direction
actor 访客 as guest
actor 注册用户 as user
actor 管理员 as admin
rectangle 系统 {
guest --> (浏览商品)
user --> (浏览商品)
user --> (下单购买)
user --> (查看订单)
admin --> (管理商品)
admin --> (管理订单)
admin --> (管理用户)
(下单购买) .> (浏览商品) : includes
(查看订单) .> (下单购买) : extends
}
@enduml
```
渲染效果如下:

PlantUML 活动图 (Activity Diagram)
活动图用于描述业务流程或工作流,展示活动之间的控制流。
```plantuml
@startuml
start
:用户访问登录页面;
:输入用户名和密码;
if (验证用户信息?) then (成功)
:跳转到主页;
:显示欢迎信息;
else (失败)
:显示错误信息;
:返回登录页面;
endif
stop
@enduml
```
渲染效果如下:

(三) Graphviz(复杂图形专家)
核心优势:
- 强大布局算法:使用 DOT 语言定义图形结构,自动生成层次图、树状图等复杂布局。
- 高定制性:支持调整节点形状、颜色、边样式等细节,适合数据可视化和网络拓扑图。
- 跨平台支持:通过插件(如 Viz.js)可在 Markdown 中使用,输出 SVG 或 PNG 格式。
适用场景:算法流程图、数据结构示意图、网络架构图等需要精细控制的场景。
digraph finite_state_machine {
rankdir=LR;
size="8,5"
node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
node [shape = circle];
LR_0 -> LR_2 [ label = "SS(B)" ];
LR_0 -> LR_1 [ label = "SS(S)" ];
LR_1 -> LR_3 [ label = "S($end)" ];
LR_2 -> LR_6 [ label = "SS(b)" ];
LR_2 -> LR_5 [ label = "SS(a)" ];
LR_2 -> LR_4 [ label = "S(A)" ];
LR_5 -> LR_7 [ label = "S(b)" ];
LR_5 -> LR_5 [ label = "S(a)" ];
LR_6 -> LR_6 [ label = "S(b)" ];
LR_6 -> LR_5 [ label = "S(a)" ];
LR_7 -> LR_8 [ label = "S(b)" ];
LR_7 -> LR_5 [ label = "S(a)" ];
LR_8 -> LR_6 [ label = "S(b)" ];
LR_8 -> LR_5 [ label = "S(a)" ];
}

第三部分:其他实用绘图工具
(一)字符画
纯文本转字符画,支持多种字符集,如 ASCII、Unicode 等。
┌────────────┐
│ 用户 │
└─────┬──────┘
│
┌─────▼──────┐
│ Web服务器 │
└─────┬──────┘
│
┌─────────┼─────────┐
│ │ │
┌───▼──┐ ┌───▼──┐ ┌───▼──┐
│ DB1 │ │ DB2 │ │ DB3 │
└──────┘ └──────┘ └──────┘
(二)Draw.io
拖拽式在线工具,支持导出 XML 格式嵌入 Markdown,适合混合文本与图形的场景。

(三)Excalidraw
手绘质感:生成具有草图风格的图表,适合快速原型设计和头脑风暴

第四部分:平台支持情况对比
| 工具 | GitHub | GitLab | VS Code | Typora | Obsidian |
|---|---|---|---|---|---|
| Mermaid | ✔️ | ✔️ | 🔌 | ✔️ | 🔌 |
| PlantUML | ❌ | ✔️ | 🔌 | ❌ | 🔌 |
| Graphviz | ❌ | ✔️ | 🔌 | ❌ | 🔌 |
说明:✔️ 原生支持 🔌 插件支持 ❌ 不支持
第五部分:实用技巧分享
1. 选择建议
- 快速上手:优先选择
Mermaid,语法简单且集成广泛。 - 专业 UML:
PlantUML是首选,适合严格遵循标准的开发场景。 - 复杂图形:
Graphviz提供最高级别的控制,适合算法和数据可视化。
通过合理选择工具,可在 Markdown 中实现从简单流程到复杂架构的全场景可视化,同时保持文本的可维护性和版本控制优势。
2. 版本控制最佳实践
- 将图表源码与项目代码一同管理
- 使用有意义的提交信息描述图表变更
- 建立团队统一的图表规范
3. 性能优化建议
- 大型图表考虑拆分为多个小图表
- 定期清理不再使用的图表代码
- 为复杂图表添加注释说明
第六部分:数哥私藏资料推荐
结语
掌握这些 Markdown 图表工具,可以让你的技术文档更加生动直观。选择合适的工具不仅能提升写作效率,还能增强文档的可读性和专业性。
| 工具 | 特点 | 适合人群 |
|---|---|---|
| Mermaid | 语法简单,支持广泛 | 所有技术人 |
| PlantUML | 专业UML,功能强大 | 软件工程师 |
| Graphviz | 布局智能,高度定制 | 数据科学家 |
记住一句话:工具千万种,适合第一位。
建议从Mermaid开始尝试,它是上手最容易、应用最广泛的工具!
📌 本次分享就到这里,感谢你的阅读!
🔔 关注【数说编程】,第一时间获取技术写作、效率工具、编程干货!
💬 如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、分享给更多朋友!
评论