Graphviz:基于 DOT 代码绘图,无需拖拽,自动生成拓扑与架构图 作者:马育民 • 2026-07-27 11:23 • 阅读:10004 # 介绍 **Graphviz(Graph Visualization Software)** 是一套**开源的图可视化工具集**,由贝尔实验室开发,核心作用:**用文本描述图结构,自动布局并生成图形**。 - 官方网站:https://graphviz.org/ - 开源协议:EPL(开源免费,商用友好) - 核心思想:**声明式绘图**,不用手动拖拽,写文本语法描述节点和边,程序自动计算节点位置、布线。 > 区别于 Visio、Draw.io:后者是拖拽式;Graphviz 是**代码驱动绘图**,非常适合程序自动生成流程图、架构图、依赖图。 # 概念 Graphviz 使用专属语言 **DOT语言** 描述图形,基础元素: 1. **图(graph / digraph)** - `graph`:无向图,连线用 `--` - `digraph`:**有向图(最常用)**,连线用 `->` 2. **节点 node**:图中的顶点 3. **边 edge**:节点之间的连线 4. **属性 attr**:设置颜色、形状、字体、尺寸、标签等 # 例子 ### 1)有向图 digraph(*.dot 文件) ```dot digraph G { A -> B; B -> C; A -> C; } ``` 运行后自动生成三角形有向图。 ### 带样式增强示例 ```dot digraph 系统架构 { rankdir=TB; // TB从上到下,LR从左到右 Web[shape=box,color=blue]; API[shape=ellipse]; DB[shape=cylinder]; Web -> API[label="http请求"]; API -> DB[label="SQL查询"]; } ``` 常用布局方向: - `LR`:Left → Right 左右横向(架构图首选) - `TB`:Top → Bottom 自上而下(流程图) - `BT`、`RL` 反向布局 # 五大布局引擎 Graphviz内置多种自动布局算法,根据图复杂度选择: 1. **dot(默认)** 层级布局,适合**流程图、架构图、依赖树**(从上至下分层)。绝大多数场景首选。 2. **neato** 力导向布局,适合无向网状图、社交网络。 3. **fdp** 改进版力导向,适合更大规模网络图。 4. **circo** 环形布局,节点排成圆环。 5. **twopi** 放射状布局(中心节点向外辐射,星形拓扑) 调用方式示例(命令行): ```bash # 使用dot引擎生成png dot test.dot -Tpng -o test.png # 使用neato力导向布局 neato test.dot -Tpng -o net.png ``` # 使用方式 ### 方式1:命令行原生工具 1. 安装 Graphviz 本体(Windows/macOS/Linux 包管理器可安装) 2. 编写 `.dot` 文件 3. 命令行导出 PNG/SVG/PDF: ```bash dot demo.dot -Tsvg -o demo.svg ``` ### 方式2:集成在各类软件中 - VS Code:安装 Graphviz Preview 插件,实时预览 - Jupyter Notebook:Python `graphviz` / `pydot` 库 - PlantUML:**底层依赖Graphviz**!PlantUML画时序图、架构图,最终调用graphviz渲染 - Obsidian、Logseq、GitBook 等笔记软件 - Python / Java / Go / JavaScript 都有绑定库,可以代码动态生成图 > 重点提醒:PlantUML只是语法封装,**没有安装Graphviz就无法渲染流程图**。 # 适用场景 - 软件架构图、微服务调用关系 - 数据库ER图(实体关系图) - 程序调用图、函数依赖、模块依赖 - 状态机、有限状态自动机 - 网络拓扑图 - 决策流程图 - 编译原理:语法树、控制流图CFG # 优缺点 ### 优点 1. **文本即图形**:代码纳入Git版本管理,方便diff对比图纸变更 2. 可自动化:程序批量生成海量图表(日志分析、依赖分析) 3. 布局自动计算,不用手动对齐拖拽 4. 输出格式丰富:PNG、SVG、PDF、EPS 5. 跨平台、开源免费 ### 缺点 1. 复杂自定义排版不如拖拽绘图工具灵活,精细微调属性需要学习DOT语法 2. 超大图(上万节点)渲染速度下降 3. 不适合自由手绘、不规则创意图表 # 相关工具区分 1. **Graphviz = DOT渲染引擎** 2. **PlantUML**:更友好的高层语法,生成DOT再交给Graphviz渲染 3. **Mermaid**:和Graphviz定位类似,Markdown内置绘图,**不需要安装Graphviz**,语法不同 原文出处:http://www.malaoshi.top/show_1GW3kgJA1HsS.html