流程图工具对比:Mermaid、PlantUML、draw.io、Graphviz、Excalidraw

首页 博客

时间:2026年8月30日

画流程图的方式和工具很多,很多时候可能只是偶尔使用一下,这里也只是简单提及一些,方便使用的时候选择和继续探索。


一、为什么有这么多工具?

流程图工具大致可以分为三个派别,主要由需要和方便决定的:

1. 代码即图表(text-to-diagram)

纯文本描述图的结构,工具自动计算布局。MermaidPlantUMLGraphviz 都属于这一类。核心优势是可版本控制、可 diff (e.g., git)、可自动化生成。适合文档和代码库中的图表。

2. 拖拽式绘图(Direct Manipulation)

遵循原则是“所见即所得”,可用鼠标拖放形状、连线、调整位置。draw.io 这类工具的代表。核心优势是视觉可控、精度高、形状库丰富。适合需要精确排版和正式交付的图表。一些可导出为可编辑的文本打码,如draw.io可以直接导出为XML。

3. 手绘风格白板(Sketch / Whiteboard)

Excalidraw是典型代表。手绘风格给人一种“还在讨论中“的临时感,降低了完美主义的心理门槛,让人更愿意快速动笔。适合头脑风暴和设计初稿。

二、核心对比一览

Mermaid PlantUML draw.io Graphviz Excalidraw
类型 文本→图表 文本→图表 拖拽式 GUI 文本→图表(CLI) 手绘风格白板
核心语法 Markdown 风格 DSL(类似 Java) XML(拖拽生成) DOT 语言 JSON(拖拽生成)
Git 友好度 ⭐⭐⭐⭐⭐ 极佳 ⭐⭐⭐⭐⭐ 极佳 ⭐⭐ XML 可 diff 但较乱 ⭐⭐⭐⭐⭐ 极佳 ⭐⭐⭐ 可 diff 但较乱
GitHub 原生支持 ✅ 原生渲染 (.mmd文件可以)
适用图表类型 流程图、时序图、ER 图、类图、甘特图 全部 14 种 UML + 线框图、思维导图 几乎所有类型(UML、网络、云架构、BPMN) 大型图结构、依赖图、网络拓扑 草图、线框图、架构讨论
适合场景 README、ADR、技术文档 企业级 UML 文档、Java 项目 正式云架构图、对外交付文档 大规模自动生成图 头脑风暴、设计初稿、
开源协议 MIT GPL v3 Apache 2.0 EPL 1.0 MIT
VS Code 插件 Mermaid Preview PlantUML Draw.io Integration Graphviz Interactive Preview Excalidraw VS Code

三、同一张流程图,不同实现方式

我们用同一个例子来简单比较不同的实现方式: 用户登录流程(输入账号密码 → 验证 → 成功/失败分支)。

1.Mermaid

demo.mmd

graph TD
    A[用户输入账号密码] --> B{验证用户信息}
    B -->|验证通过| C[登录成功,跳转首页]
    B -->|验证失败| D[提示错误,返回登录页]

2. PlantUML

demo.puml

@startuml
start
:用户输入账号密码;
if (验证用户信息?) then (验证通过)
    :登录成功,跳转首页;
    stop
else (验证失败)
    :提示错误,返回登录页;
    stop
endif
@enduml

3. draw.io

demo.drawio

<mxfile host="Electron">
  <diagram id="login-flow" name="登录流程">
    <mxGraphModel dx="2264" dy="850" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="用户输入账号密码" vertex="1">
          <mxGeometry height="50" width="160" x="100" y="100" as="geometry" />
        </mxCell>
        <mxCell id="3" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="验证用户信息" vertex="1">
          <mxGeometry height="80" width="120" x="120" y="200" as="geometry" />
        </mxCell>
        <mxCell id="4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="登录成功,跳转首页" vertex="1">
          <mxGeometry height="50" width="160" x="270" y="320" as="geometry" />
        </mxCell>
        <mxCell id="5" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="提示错误,返回登录页" vertex="1">
          <mxGeometry height="50" width="160" x="-70" y="320" as="geometry" />
        </mxCell>
        <mxCell id="e1" edge="1" parent="1" source="2" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;" target="3">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e2" edge="1" parent="1" source="3" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;" target="4" value="验证通过">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e3" edge="1" parent="1" source="3" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;" target="5" value="验证失败">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>

4. Graphviz (DOT语言)

demo.gv

digraph login {
    node [
        shape=box,
        fixedsize=false,
        style=filled,
        fillcolor="#e8f4f8",
        fontname="PingFang SC",
        margin="0.35,0.1"
    ]

    A [label="用户输入账号密码"]
    B [label="验证用户信息"]
    C [label="登录成功跳转首页"]
    D [label="提示错误返回登录页"]

    A -> B
    B -> C [xlabel="验证通过"]
    B -> D [label="验证失败"]
}

5. Excalidraw (JSON描述)

Excalidraw是拖拽工具,示意如下:

四、如何选择?

根据自己的需求和场景,以及时间来选择,实际过程用,也许用PowerPoint简单画一下很快很方便,也许需要选用多个工具的组合,比如:

Mermaid 写 README 小图 + draw.io 画正式架构图 + Excalidraw 做讨论草图

每个工具都有其擅长的功能和场景。