Graphviz 16.1 DOT 语言十分钟上手:流程图状态机依赖图三个模板即拿即用
一、为什么"改文本就能改图"值得
拖拽式画图工具的问题:图一复杂就连不动了,改一个节点名要重新对齐八根线。Graphviz 的思路相反——用 DOT 文本描述节点和边,布局交给引擎自动算,图随文本进版本库,diff 都能看。
安装官方包后把 bin 加入 PATH,核验:
dot -V # dot - graphviz version 16.1.0 (20260904.0139)二、流程图模板(本文所有图都是 dot.exe 真实渲染)
digraph flow { rankdir=TB; start [shape=oval, label="开始"]; check [shape=diamond, label="数据合法?"]; save [shape=box, label="入库"]; err [shape=box, label="返回错误"]; start -> check; check -> save [label="是"]; check -> err [label="否"]; save -> start [style=dashed, label="下一笔"]; }出图一条命令:dot -Tpng flow.gv -o flow.png,换-Tsvg得矢量图。
三、状态机与依赖图
状态机用rankdir=LR横排 + 圆形节点,转移条件写在边上:
依赖图配style="rounded,filled"圆角填充 + 圆柱形数据存储,架构图立刻像样:
四、布局引擎怎么选
| 引擎 | 适用场景 |
|---|---|
| dot | 有向层次图(流程图/依赖) |
| neato / fdp | 无向力导向(网络/聚类) |
| circo | 环形拓扑 |
| twopi | 放射结构 |
选错引擎的典型症状是"线全交叉"——有向图老实用 dot,无向网络换 neato。
五、三个进阶技巧
- 分组框:
subgraph cluster_x { label="模块"; },cluster 前缀必须有; - 上色:
style=filled; fillcolor="#E8F4FF"; - 中文不乱码:文件存 UTF-8 +
fontname="Microsoft YaHei"。
六、工程化场景
- CI 里
dot -Tsvg生成架构图随文档发布; - 数据库表关系、微服务调用链用脚本生成 DOT——图永远和事实一致;
- 状态机画完直接当测试用例清单用(每条边一个用例)。
六、实战:给项目画一张带分组的流水线图
digraph ci { rankdir=LR; node [shape=box, style="rounded,filled", fillcolor="#E8F4FF", fontname="Microsoft YaHei"]; subgraph cluster_build { label="构建阶段"; fontname="Microsoft YaHei"; style=dashed; lint [label="代码检查"]; unit [label="单元测试"]; } subgraph cluster_release { label="发布阶段"; fontname="Microsoft YaHei"; style=dashed; pkg [label="打包"]; dep [label="部署"]; } lint -> unit -> pkg -> dep; dep -> unit [label="失败回滚", color=red, constraint=false]; }两个要点:cluster_前缀把相关节点框进虚线分组;constraint=false让回滚边不参与层次计算,避免整张图被拉歪。
七、什么时候不该用 Graphviz
单张营销海报、需要精确像素级排版的场景,图形工具更合适。Graphviz 的甜区是结构化、会频繁变更、由数据驱动的图——只要节点和边能从代码或数据里生成,图就能跟着事实走。
配套完整工程
Graphviz 16.1.0 图结构可视化工具 Windows x64 官方安装版+DOT语言入门教程
官方安装包与全部模板源码(含本文三张图的 .gv 文件)都在工程包里。