--- 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/)