Mermaid 在 Markdown 中绘制图表

本教程将系统介绍如何使用 Mermaid 在 Markdown 中绘制各种专业图表。Mermaid 采用类似代码的文本语法,易于编写、修改和版本控制,是技术文档撰写的得力工具。

提示:你可以在 在线markdown编辑器 上实时编辑和预览以下所有示例。


一、流程图与结构图

这类图表主要用于展示流程、结构和交互关系。

1. 流程图 (Flowchart)

最常用的图表类型,用于展示步骤、判断和流程走向。

核心语法

示例

```mermaid
graph TD
    A[开始] --> B{登录验证}
    B -- 成功 --> C[进入主页面]
    B -- 失败 --> D[显示错误提示]
    D --> A
    C --> E[结束]
```

2. 时序图 (Sequence Diagram)

展示对象之间的消息交互和时间顺序,常用于描述系统内部通信。

核心语法

示例

```mermaid
sequenceDiagram
    participant 用户
    participant 前端
    participant 后端API
    participant 数据库

    用户->>前端: 点击登录按钮
    前端->>后端API: POST /login
    后端API->>数据库: 查询用户信息
    数据库-->>后端API: 返回用户数据
    后端API-->>前端: 返回登录令牌
    前端-->>用户: 跳转到首页
```

3. 甘特图 (Gantt Diagram)

用于项目管理,直观展示任务的时间线、持续时间和进度。

核心语法

示例

```mermaid
gantt
    title 电商项目上线计划
    dateFormat YYYY-MM-DD

    section 需求阶段
    需求调研           :done, a1, 2025-01-01, 7d
    需求评审           :active, a2, 2025-01-08, 3d
    原型设计           :a3, 2025-01-11, 5d

    section 开发阶段
    前端开发           :a4, 2025-01-16, 14d
    后端开发           :a5, 2025-01-16, 14d
    接口联调           :a6, 2025-01-30, 5d

    section 测试阶段
    功能测试           :a7, 2025-02-04, 5d
    部署上线           :milestone, a8, 2025-02-09, 1d
```

4. 类图 (Class Diagram)

用于面向对象设计,展示类的结构、属性和方法,以及类之间的关系。

核心语法

示例

```mermaid
classDiagram
    class 动物 {
        -String 名称
        -int 年龄
        +吃() void
        +睡() void
    }

    class 鸟类 {
        +String 羽毛颜色
        +飞() void
    }

    class 企鹅 {
        +String 栖息地
        +游泳() void
    }

    class 狗 {
        +String 品种
        +吠() void
    }

    动物 <|-- 鸟类 : 继承
    动物 <|-- 狗 : 继承
    鸟类 <|-- 企鹅 : 继承
```

5. 状态图 (State Diagram)

描述一个实体在其生命周期内可能经历的所有状态及状态转换。

核心语法

示例

```mermaid
stateDiagram-v2
    [*] --> 草稿
    草稿 --> 审核中 : 提交审核
    审核中 --> 已批准 : 审核通过
    审核中 --> 草稿 : 审核驳回
    已批准 --> 已发布 : 发布
    已批准 --> 已归档 : 归档
    已发布 --> 已归档 : 归档
    已归档 --> [*]

    state 审核中 {
        [*] --> 初审
        初审 --> 终审
        终审 --> [*]
    }
```

6. 实体关系图 (ER Diagram)

用于数据库设计,展示实体、属性及其关系。

核心语法

示例

```mermaid
erDiagram
    用户 ||--o{ 订单 : 拥有
    订单 ||--|{ 订单明细 : 包含
    商品 ||--o{ 订单明细 : 属于
    用户 {
        int 用户ID PK
        string 用户名
        string 邮箱
        string 手机号
    }
    订单 {
        int 订单ID PK
        int 用户ID FK
        datetime 下单时间
        decimal 总金额
        string 状态
    }
    商品 {
        int 商品ID PK
        string 商品名称
        decimal 价格
        int 库存
    }
    订单明细 {
        int 明细ID PK
        int 订单ID FK
        int 商品ID FK
        int 数量
        decimal 单价
    }
```

7. 用户旅程图 (User Journey)

描述用户在使用产品过程中经历的步骤、情绪变化和体验。

核心语法

示例

```mermaid
journey
    title 网上购物体验
    section 搜索商品
      打开应用: 3: 用户
      搜索关键词: 4: 用户
      浏览结果列表: 4: 用户
    section 下单支付
      查看商品详情: 5: 用户
      加入购物车: 4: 用户
      填写收货信息: 2: 用户
      选择支付方式: 3: 用户
      完成支付: 5: 系统, 用户
    section 售后服务
      查看物流: 3: 用户
      确认收货: 4: 用户
      评价商品: 5: 用户
```

二、数据与可视化图表

这类图表主要用于数据的可视化分析和展示。

8. 饼图 (Pie Chart)

用于展示数据的比例分布,直观显示各部分占比。

核心语法

示例

```mermaid
pie
    title 2025年Q1营收分布
    "产品A" : 45
    "产品B" : 25
    "产品C" : 18
    "产品D" : 12
```

9. 象限图 (Quadrant Chart)

将数据点分布在四个象限中,用于策略分析、优先级排序等场景。

核心语法

示例

```mermaid
quadrantChart
    title 任务优先级分析
    x-axis 不紧急 --> 紧急
    y-axis 不重要 --> 重要

    quadrant-1 重要且紧急
    quadrant-2 重要但不紧急
    quadrant-3 紧急但不重要
    quadrant-4 不紧急不重要

    项目危机: [0.9, 0.8]
    长期规划: [0.2, 0.9]
    日常邮件: [0.8, 0.1]
    无意义会议: [0.2, 0.1]
    产品发布: [0.9, 0.7]
    团队建设: [0.3, 0.8]
```

10. 需求图 (Requirement Diagram)

用于系统需求工程,展示需求、测试用例及其关系。

核心语法

示例

```mermaid
requirementDiagram
    requirement 用户登录需求 {
        id: REQ-001
        text: 系统应支持用户通过用户名和密码登录
        risk: 高
        verifymethod: 测试
    }

    requirement 数据安全需求 {
        id: REQ-002
        text: 用户密码应加密存储
        risk: 高
        verifymethod: 审查
    }

    element 登录测试用例 {
        type: testcase
        text: 验证正确凭据能够成功登录
    }

    element 加密模块 {
        type: implementation
        text: 密码加密组件
    }

    用户登录需求 -verifies-> 登录测试用例
    数据安全需求 -satisfies-> 加密模块
```

三、高级与专业图表

这类图表用于更专业的领域,如软件架构、版本控制等。

11. Git分支图 (Gitgraph)

可视化Git仓库的分支、提交和合并历史。

核心语法

示例

```mermaid
gitGraph
    commit id: "初始提交"
    commit id: "添加基础结构"
    branch develop
    checkout develop
    commit id: "开发功能A"
    commit id: "开发功能B"
    branch feature/login
    checkout feature/login
    commit id: "实现登录界面"
    commit id: "实现登录逻辑"
    checkout develop
    merge feature/login tag: "v1.0-alpha"
    checkout main
    merge develop tag: "v1.0-release"
    commit id: "修复紧急Bug"
```

12. C4图 (C4 Diagram)

用于软件架构可视化,展示从系统到代码的四个层次。

核心语法

示例

```mermaid
C4Context
    title 在线购物系统上下文图

    Person(顾客, "顾客", "使用系统的消费者")
    System(商城系统, "在线商城系统", "提供商品浏览、下单、支付功能")
    System_Ext(支付网关, "支付网关", "第三方支付服务")
    System_Ext(物流系统, "物流系统", "配送管理")

    Rel(顾客, 商城系统, "浏览、购买商品", "HTTPS")
    Rel(商城系统, 支付网关, "调用支付接口", "API")
    Rel(商城系统, 物流系统, "通知发货", "API")

    UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1")
```

13. 思维导图 (Mindmap)

以树状结构组织思路、概念和想法,帮助梳理逻辑。

核心语法

示例

```mermaid
mindmap
  root((项目规划))
    需求分析
      用户访谈
      竞品调研
      需求文档
    技术选型
      前端框架
        React
        Vue
      )后端框架(
        Spring Boot
        Node.js
      数据库
        MySQL
        MongoDB
    开发计划
      任务分解
      时间估算
      人员分配
    测试部署
      单元测试
      集成测试
      上线运维
```

14. 时间线 (Timeline)

按时间顺序展示事件、里程碑或发展历程。

核心语法

示例

```mermaid
timeline
    title 互联网发展历程
    section 早期阶段
      1969年 : ARPANET诞生
      1971年 : 第一封电子邮件
      1983年 : TCP/IP协议成为标准
    section Web 1.0
      1991年 : 万维网向公众开放
      1994年 : 网景浏览器发布
      1998年 : Google公司成立
    section Web 2.0
      2004年 : Facebook上线
      2005年 : YouTube创建
      2006年 : Twitter发布
    section 移动互联网
      2007年 : iPhone发布
      2008年 : Android系统问世
      2010年 : 微信诞生
```

15. 桑基图 (Sankey Diagram)

展示流量、能量、资金等资源的流向与分配,宽度代表流量大小。

核心语法

示例

```mermaid
sankey-beta
    %% 定义节点
    总预算
    研发
    市场
    运营
    行政
    产品开发
    技术开发
    广告投放
    公关活动
    日常运营
    人力资源

    %% 定义流量
    总预算 --> 研发 : 40
    总预算 --> 市场 : 25
    总预算 --> 运营 : 20
    总预算 --> 行政 : 15

    研发 --> 产品开发 : 22
    研发 --> 技术开发 : 18

    市场 --> 广告投放 : 15
    市场 --> 公关活动 : 10

    运营 --> 日常运营 : 12
    运营 --> 人力资源 : 8
```

四、其他图表

16. 方块图 (Block Diagram)

展示系统各模块的组成、接口和信号流向。

核心语法

示例

```mermaid
block
    title 智能家居系统架构

    block:传感器层
        温湿度传感器
        光照传感器
        人体传感器
    end

    block:网关层
        Zigbee网关
        WiFi网关
    end

    block:控制层
        智能路由器
        场景引擎
    end

    block:应用层
        手机App
        语音助手
        智能面板
    end

    温湿度传感器 --> Zigbee网关
    光照传感器 --> Zigbee网关
    人体传感器 --> Zigbee网关
    Zigbee网关 --> 智能路由器
    WiFi网关 --> 智能路由器
    智能路由器 --> 场景引擎
    场景引擎 --> 手机App
    场景引擎 --> 语音助手
    场景引擎 --> 智能面板
```

17. ZooKeeper图 (实验性)

专门用于Apache ZooKeeper服务的可视化,展示集群的节点结构。

注意:此功能目前为实验性,可能在某些编辑器或平台中不支持,语法也可能在后续版本中变化。

核心语法

示例

```mermaid
zookeeper
    title ZooKeeper集群结构

    node "Leader" as leader
    node "Follower 1" as follower1
    node "Follower 2" as follower2
    node "Observer" as observer

    leader --> follower1
    leader --> follower2
    leader --> observer
```