copilot-swe-agent[bot] a0d167b756 Add comprehensive Mermaid study guide with syntax tips
Co-authored-by: ZiuChen <64892985+ZiuChen@users.noreply.github.com>
2025-08-12 03:55:35 +00:00

831 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
editLink: false
---
# Mermaid 图表语法学习指南
Mermaid 是一个基于 JavaScript 的图表和流程图生成工具,它使用简单的文本语法来创建复杂的图表。本指南总结了各种 Mermaid 图表类型的语法和实用技巧。
## 1. 序列图 (Sequence Diagram)
序列图用于显示对象之间的交互过程,特别适合描述系统的动态行为。
### 5 个实用技巧
1. **使用 `autonumber` 自动编号**:给每个步骤添加序号,便于跟踪流程
```mermaid
sequenceDiagram
autonumber
Alice->>Bob: Hello Bob, how are you?
Bob-->>Alice: Great!
```
2. **自定义参与者颜色**:使用 `participant` 声明并在 CSS 中自定义样式
```mermaid
sequenceDiagram
participant A as Alice
participant B as Bob
A->>B: Hello
Note over A,B: 自定义参与者样式
```
3. **使用不同类型的箭头**:表达不同的消息类型
```mermaid
sequenceDiagram
Alice->>Bob: 实线箭头 (同步调用)
Alice-->>Bob: 虚线箭头 (异步调用)
Alice-xBob: 实线箭头+叉 (同步调用失败)
Alice--xBob: 虚线箭头+叉 (异步调用失败)
```
4. **添加激活框**:显示对象的生命周期
```mermaid
sequenceDiagram
Alice->>+Bob: 开始处理
Bob->>+Carol: 转发请求
Carol-->>-Bob: 返回结果
Bob-->>-Alice: 处理完成
```
5. **使用循环和条件**:表达复杂的业务逻辑
```mermaid
sequenceDiagram
Alice->>Bob: 请求数据
loop 每5分钟
Bob->>Bob: 检查状态
end
alt 数据准备好
Bob-->>Alice: 返回数据
else 数据未准备好
Bob-->>Alice: 返回等待消息
end
```
## 2. 流程图 (Flowchart)
流程图用于表示算法、工作流程或决策过程。
### 5 个实用技巧
1. **使用不同形状的节点**:区分不同类型的步骤
```mermaid
flowchart TD
A[开始] --> B{条件判断}
B -->|是| C[处理]
B -->|否| D((结束))
C --> E[/输出/]
E --> F[\输入\]
```
2. **设置流程方向**:选择最适合的布局
```mermaid
flowchart LR
A --> B --> C
flowchart TD
D --> E --> F
flowchart BT
G --> H --> I
```
3. **使用子图组织复杂流程**:提高可读性
```mermaid
flowchart TD
A[开始] --> B[输入数据]
B --> C{验证数据}
subgraph 数据处理
D[清洗数据] --> E[转换格式]
E --> F[保存到数据库]
end
C -->|有效| D
C -->|无效| G[显示错误]
```
4. **使用不同样式的连接线**:表达不同的关系
```mermaid
flowchart TD
A -.-> B
B === C
C --> D
D -.-> E
E ==> F
```
5. **添加点击事件和链接**:增加交互性
```mermaid
flowchart TD
A[开始] --> B[文档]
B --> C[结束]
click A "https://example.com" "点击查看详情"
click B href "https://docs.example.com" "打开文档"
```
## 3. 类图 (Class Diagram)
类图用于显示系统中类的静态结构和它们之间的关系。
### 5 个实用技巧
1. **定义完整的类结构**:包括属性、方法和可见性
```mermaid
classDiagram
class Animal {
-String name
-int age
+getName() String
+setName(String) void
+makeSound()* void
}
```
2. **使用不同的关系类型**:表达准确的类关系
```mermaid
classDiagram
Animal <|-- Dog : 继承
Animal <|-- Cat : 继承
Dog *-- Tail : 组合
Dog o-- Owner : 聚合
Dog ..> Food : 依赖
```
3. **使用泛型和接口**:表达更复杂的设计
```mermaid
classDiagram
class List~T~ {
+add(T item) void
+get(int index) T
}
class ArrayList~T~ {
-T[] items
+add(T item) void
+get(int index) T
}
List~T~ <|.. ArrayList~T~
```
4. **添加注释和标签**:增加说明信息
```mermaid
classDiagram
class Order {
+orderId : String
+orderDate : Date
+calculateTotal() Money
}
note for Order "订单类负责管理订单信息"
Order : +processOrder() void
```
5. **使用命名空间组织类**:管理大型系统
```mermaid
classDiagram
namespace com.example.model {
class User {
+id: String
+name: String
}
}
namespace com.example.service {
class UserService {
+createUser() User
}
}
```
## 4. 状态图 (State Diagram)
状态图用于描述对象在其生命周期中的状态变化。
### 5 个实用技巧
1. **定义状态转换条件**:清晰表达状态变化的触发条件
```mermaid
stateDiagram-v2
[*] --> 待机
待机 --> 工作 : 开始工作
工作 --> 暂停 : 暂停 / 保存状态
暂停 --> 工作 : 继续工作
工作 --> [*] : 完成工作
```
2. **使用复合状态**:处理复杂的状态层次
```mermaid
stateDiagram-v2
[*] --> 运行中
state 运行中 {
[*] --> 空闲
空闲 --> 处理中 : 接收任务
处理中 --> 空闲 : 任务完成
state 处理中 {
[*] --> 验证
验证 --> 执行 : 验证通过
执行 --> [*] : 执行完成
}
}
运行中 --> [*] : 关闭
```
3. **添加并发状态**:表示同时进行的状态
```mermaid
stateDiagram-v2
[*] --> 活跃
state 活跃 {
[*] --> 数据处理
[*] --> 用户界面
--
数据处理 --> 处理中 : 开始处理
处理中 --> 完成 : 处理结束
--
用户界面 --> 显示中 : 更新界面
显示中 --> 等待 : 界面更新完成
}
```
4. **使用状态注释**:添加详细说明
```mermaid
stateDiagram-v2
登录 : 用户输入凭据
验证 : 系统验证用户身份
认证成功 : 用户获得访问权限
[*] --> 登录
登录 --> 验证 : 提交凭据
验证 --> 认证成功 : 凭据正确
验证 --> 登录 : 凭据错误
```
5. **处理错误状态和恢复**:设计健壮的状态机
```mermaid
stateDiagram-v2
[*] --> 初始化
初始化 --> 运行 : 初始化成功
初始化 --> 错误 : 初始化失败
运行 --> 错误 : 发生异常
错误 --> 运行 : 恢复操作
错误 --> [*] : 无法恢复
```
## 5. 实体关系图 (Entity Relationship Diagram)
ER图用于设计和可视化数据库结构。
### 5 个实用技巧
1. **定义实体属性和主键**:清晰表达数据结构
```mermaid
erDiagram
USER {
int user_id PK
string username
string email UK
datetime created_at
}
POST {
int post_id PK
int user_id FK
string title
text content
datetime published_at
}
```
2. **使用不同的关系类型**:准确表达数据关系
```mermaid
erDiagram
USER ||--o{ POST : "发布"
POST }o--|| CATEGORY : "属于"
USER }o--o{ ROLE : "拥有"
POST ||--o{ COMMENT : "包含"
```
3. **添加关系属性**:描述关系的附加信息
```mermaid
erDiagram
STUDENT {
int student_id PK
string name
string email
}
COURSE {
int course_id PK
string course_name
int credits
}
ENROLLMENT {
int student_id PK, FK
int course_id PK, FK
datetime enrollment_date
string grade
}
STUDENT ||--o{ ENROLLMENT : "注册"
COURSE ||--o{ ENROLLMENT : "开设"
```
4. **使用约束和索引标记**:表达数据库设计细节
```mermaid
erDiagram
USER {
int id PK
string email UK "唯一约束"
string phone UK "唯一约束"
string password "非空约束"
datetime created_at "默认当前时间"
boolean is_active "默认true"
}
```
5. **组织复杂的数据模型**:使用分组和模块化
```mermaid
erDiagram
%% 用户模块
USER ||--o{ USER_PROFILE : "拥有"
USER ||--o{ USER_ROLE : "分配"
%% 内容模块
USER ||--o{ ARTICLE : "创建"
ARTICLE ||--o{ COMMENT : "包含"
ARTICLE }o--|| CATEGORY : "分类"
%% 权限模块
ROLE ||--o{ USER_ROLE : "分配给"
ROLE ||--o{ PERMISSION : "包含"
```
## 6. 用户旅程图 (User Journey)
用户旅程图用于描述用户与产品或服务交互的完整过程。
### 5 个实用技巧
1. **定义完整的用户路径**:从开始到结束的完整体验
```mermaid
journey
title 网上购物用户旅程
section 发现阶段
搜索产品 : 3: 用户
浏览商品页面 : 4: 用户
比较不同商品 : 2: 用户
section 购买阶段
添加到购物车 : 5: 用户
填写收货信息 : 3: 用户
选择支付方式 : 4: 用户
完成支付 : 5: 用户
```
2. **使用情感评分**:量化用户体验的好坏
```mermaid
journey
title 客户服务体验
section 问题报告
发现问题 : 1: 用户 : 沮丧
寻找联系方式 : 2: 用户 : 困惑
section 客服交流
联系客服 : 4: 用户, 客服 : 希望
问题诊断 : 5: 用户, 客服 : 满意
解决方案 : 5: 用户, 客服 : 高兴
```
3. **包含多个角色**:展示不同参与者的视角
```mermaid
journey
title 在线教育课程体验
section 课程准备
制作课程内容 : 4: 讲师
上传课程视频 : 3: 讲师
设置课程价格 : 5: 讲师
section 学生学习
搜索课程 : 4: 学生
购买课程 : 3: 学生
观看视频 : 5: 学生
完成作业 : 4: 学生
```
4. **标识关键触点**:突出重要的交互节点
```mermaid
journey
title 移动应用注册流程
section 首次接触
下载应用 : 4: 用户
启动应用 : 5: 用户
section 注册过程
点击注册 : 4: 用户
输入手机号 : 3: 用户 : 关键触点
接收验证码 : 2: 用户 : 痛点
完成注册 : 5: 用户 : 成功点
```
5. **描述不同场景路径**:考虑多种用户行为
```mermaid
journey
title 电商退货流程
section 申请退货
发现产品问题 : 1: 用户
查找退货政策 : 3: 用户
提交退货申请 : 4: 用户
section 处理流程
审核申请 : 4: 客服
生成退货标签 : 5: 系统
section 完成退货
寄回商品 : 3: 用户
收到退款 : 5: 用户
```
## 7. 甘特图 (Gantt Chart)
甘特图用于项目管理,显示任务的时间安排和依赖关系。
### 5 个实用技巧
1. **设置任务依赖关系**:明确任务之间的先后顺序
```mermaid
gantt
title 网站开发项目进度
dateFormat YYYY-MM-DD
section 设计阶段
需求分析 :done, des1, 2024-01-01,2024-01-05
UI设计 :done, des2, after des1, 10d
原型制作 :active, des3, after des2, 5d
section 开发阶段
前端开发 :dev1, after des3, 20d
后端开发 :dev2, after des3, 25d
集成测试 :dev3, after dev1 dev2, 10d
```
2. **使用里程碑标记重要节点**:突出关键时间点
```mermaid
gantt
title 产品发布计划
dateFormat YYYY-MM-DD
section 开发
功能开发 :dev, 2024-01-01, 30d
section 测试
内部测试 :test1, after dev, 10d
用户测试 :test2, after test1, 15d
section 发布
Beta版发布 :milestone, m1, after test2, 0d
正式发布 :milestone, m2, after test2, 30d
```
3. **标识任务状态**:跟踪项目进展
```mermaid
gantt
title 软件开发生命周期
dateFormat YYYY-MM-DD
section 已完成
需求收集 :done, req, 2024-01-01, 5d
系统设计 :done, design, after req, 8d
section 进行中
编码实现 :active, code, after design, 20d
section 计划中
系统测试 :test, after code, 10d
部署上线 :deploy, after test, 3d
```
4. **使用关键路径标识**:突出影响项目完成时间的任务
```mermaid
gantt
title 移动应用开发关键路径
dateFormat YYYY-MM-DD
section 关键路径
核心功能开发 :crit, core, 2024-01-01, 25d
性能优化 :crit, perf, after core, 10d
应用商店审核 :crit, review, after perf, 7d
section 并行任务
UI美化 :ui, 2024-01-15, 20d
文档编写 :doc, 2024-01-20, 15d
```
5. **分组显示复杂项目**:组织大型项目的任务结构
```mermaid
gantt
title 企业级系统开发
dateFormat YYYY-MM-DD
section 后端系统
数据库设计 :db, 2024-01-01, 10d
API开发 :api, after db, 20d
section 前端应用
界面设计 :ui, 2024-01-01, 15d
前端开发 :fe, after ui, 25d
section 运维部署
环境搭建 :env, 2024-01-01, 5d
CI/CD配置 :cicd, after env, 10d
生产部署 :deploy, after api fe cicd, 5d
```
## 8. 饼图 (Pie Chart)
饼图用于显示数据的比例分布。
### 5 个实用技巧
1. **显示百分比数据**:清晰表达各部分占比
```mermaid
pie title 网站流量来源分布
"搜索引擎" : 42.5
"直接访问" : 28.3
"社交媒体" : 15.2
"推荐链接" : 10.1
"其他" : 3.9
```
2. **使用有意义的标签**:提高图表可读性
```mermaid
pie title 2024年销售额分布单位万元
"华北区域 (320万)" : 320
"华南区域 (280万)" : 280
"华东区域 (450万)" : 450
"西部区域 (150万)" : 150
```
3. **突出显示重要数据**:使关键信息更突出
```mermaid
pie title 用户设备类型统计
"移动设备" : 65.2
"桌面设备" : 28.7
"平板设备" : 6.1
```
4. **保持数据精度一致**:确保数据的专业性
```mermaid
pie title 客户满意度调查结果
"非常满意 (45.2%)" : 45.2
"满意 (38.7%)" : 38.7
"一般 (12.1%)" : 12.1
"不满意 (3.5%)" : 3.5
"非常不满意 (0.5%)" : 0.5
```
5. **限制分类数量**:避免图表过于复杂
```mermaid
pie title 项目预算分配
"人力成本" : 50
"技术成本" : 25
"运营成本" : 15
"其他支出" : 10
```
## 9. Git 图 (Git Graph)
Git图用于可视化代码仓库的分支和合并历史。
### 5 个实用技巧
1. **显示标准的Git工作流**:可视化常见的开发流程
```mermaid
gitgraph
commit id: "Initial commit"
branch develop
checkout develop
commit id: "Add feature A"
commit id: "Fix bug #001"
checkout main
merge develop
commit id: "Release v1.0"
```
2. **使用功能分支模式**:展示并行开发过程
```mermaid
gitgraph
commit id: "Start project"
branch feature-login
checkout feature-login
commit id: "Add login form"
commit id: "Add validation"
checkout main
branch feature-dashboard
checkout feature-dashboard
commit id: "Create dashboard"
checkout main
merge feature-login
merge feature-dashboard
commit id: "Release v1.1"
```
3. **表示热修复流程**:显示紧急修复的分支策略
```mermaid
gitgraph
commit id: "v1.0 Release"
branch hotfix
checkout hotfix
commit id: "Fix critical bug"
checkout main
merge hotfix
commit id: "v1.0.1 Hotfix"
branch develop
checkout develop
merge main
commit id: "Continue development"
```
4. **使用标签标记版本**:清晰标识发布节点
```mermaid
gitgraph
commit id: "Initial"
commit id: "Feature 1" tag: "v0.1"
branch develop
checkout develop
commit id: "Feature 2"
commit id: "Feature 3"
checkout main
merge develop
commit id: "Release" tag: "v1.0"
```
5. **展示复杂的合并场景**:处理多分支开发
```mermaid
gitgraph
commit id: "Start"
branch feature-A
branch feature-B
checkout feature-A
commit id: "A1"
commit id: "A2"
checkout feature-B
commit id: "B1"
checkout main
merge feature-A
checkout feature-B
commit id: "B2"
checkout main
merge feature-B
commit id: "Final merge"
```
## 10. 思维导图 (Mindmap)
思维导图用于组织和可视化信息结构。
### 5 个实用技巧
1. **构建层次化的知识结构**:从中心主题向外扩展
```mermaid
mindmap
root((Web开发))
前端技术
HTML
语义化标签
表单元素
CSS
布局技术
响应式设计
JavaScript
ES6+特性
异步编程
后端技术
Node.js
Python
数据库
MySQL
MongoDB
```
2. **使用符号区分不同类型的节点**:增强视觉识别
```mermaid
mindmap
root((项目管理))
[计划阶段]
需求分析
资源规划
(执行阶段)
任务分配
进度跟踪
)监控阶段(
质量控制
风险管理
))收尾阶段((
项目交付
经验总结
```
3. **表达复杂的概念关系**:展示知识点之间的联系
```mermaid
mindmap
root((数据科学))
统计学基础
描述性统计
推断性统计
概率论
编程技能
Python
Pandas
NumPy
Scikit-learn
R语言
机器学习
监督学习
分类算法
回归算法
无监督学习
聚类分析
降维技术
```
4. **组织学习路径**:规划知识学习顺序
```mermaid
mindmap
root((全栈开发学习路径))
基础阶段
HTML/CSS
JavaScript基础
版本控制Git
前端进阶
React/Vue框架
状态管理
构建工具
后端开发
服务器语言
数据库操作
API设计
运维部署
云服务
容器技术
CI/CD
```
5. **展示系统架构思考**:可视化技术决策过程
```mermaid
mindmap
root((微服务架构))
服务拆分
按业务领域
按数据模型
按团队结构
通信机制
同步调用
HTTP/REST
gRPC
异步消息
消息队列
事件驱动
数据管理
数据库分离
数据一致性
分布式事务
运维监控
服务发现
负载均衡
日志聚合
指标监控
```
## 总结
Mermaid 提供了丰富的图表类型来可视化不同类型的信息:
- **序列图**适合描述系统交互和API调用流程
- **流程图**:适合表达算法逻辑和业务流程
- **类图**:适合设计和文档化面向对象系统
- **状态图**:适合描述系统状态变化和生命周期
- **ER图**:适合数据库设计和数据建模
- **用户旅程图**:适合用户体验设计和服务设计
- **甘特图**:适合项目管理和时间规划
- **饼图**:适合数据分析和比例展示
- **Git图**:适合版本控制和分支管理可视化
- **思维导图**:适合知识组织和头脑风暴
每种图表都有其特定的应用场景和语法特点。掌握这些技巧可以帮助你更有效地使用 Mermaid 来创建清晰、专业的图表,提升文档质量和沟通效率。
## 参考资源
- [Mermaid 官方文档](https://mermaid.js.org/)
- [Mermaid 在线编辑器](https://mermaid.live/)
- [GitHub Mermaid 支持](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/)