介绍
Graphviz(Graph Visualization Software) 是一套开源的图可视化工具集,由贝尔实验室开发,核心作用:用文本描述图结构,自动布局并生成图形。
- 官方网站:https://graphviz.org/
- 开源协议:EPL(开源免费,商用友好)
- 核心思想:声明式绘图,不用手动拖拽,写文本语法描述节点和边,程序自动计算节点位置、布线。
区别于 Visio、Draw.io:后者是拖拽式;Graphviz 是代码驱动绘图,非常适合程序自动生成流程图、架构图、依赖图。
概念
Graphviz 使用专属语言 DOT语言 描述图形,基础元素:
- 图(graph / digraph)
graph:无向图,连线用--digraph:有向图(最常用),连线用->
- 节点 node:图中的顶点
- 边 edge:节点之间的连线
- 属性 attr:设置颜色、形状、字体、尺寸、标签等
例子
1)有向图 digraph(*.dot 文件)
digraph G {
A -> B;
B -> C;
A -> C;
}
运行后自动生成三角形有向图。
带样式增强示例
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内置多种自动布局算法,根据图复杂度选择:
- dot(默认)
层级布局,适合流程图、架构图、依赖树(从上至下分层)。绝大多数场景首选。 - neato
力导向布局,适合无向网状图、社交网络。 - fdp
改进版力导向,适合更大规模网络图。 - circo
环形布局,节点排成圆环。 - twopi
放射状布局(中心节点向外辐射,星形拓扑)
调用方式示例(命令行):
# 使用dot引擎生成png
dot test.dot -Tpng -o test.png
# 使用neato力导向布局
neato test.dot -Tpng -o net.png
使用方式
方式1:命令行原生工具
- 安装 Graphviz 本体(Windows/macOS/Linux 包管理器可安装)
- 编写
.dot文件 - 命令行导出 PNG/SVG/PDF:
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
优缺点
优点
- 文本即图形:代码纳入Git版本管理,方便diff对比图纸变更
- 可自动化:程序批量生成海量图表(日志分析、依赖分析)
- 布局自动计算,不用手动对齐拖拽
- 输出格式丰富:PNG、SVG、PDF、EPS
- 跨平台、开源免费
缺点
- 复杂自定义排版不如拖拽绘图工具灵活,精细微调属性需要学习DOT语法
- 超大图(上万节点)渲染速度下降
- 不适合自由手绘、不规则创意图表
相关工具区分
- Graphviz = DOT渲染引擎
- PlantUML:更友好的高层语法,生成DOT再交给Graphviz渲染
- Mermaid:和Graphviz定位类似,Markdown内置绘图,不需要安装Graphviz,语法不同