Graphviz(深度版)
自动布局的结构图/流程图引擎
一、一句话定位
自动布局的结构图/流程图引擎
二、为什么是它:设计哲学与底层逻辑
Graphviz 用 dot 文本描述有向/无向图,自动布局(dot/neato/circle),专画系统结构、流程图、决策树、状态机。哲学是"文本描述 → 自动布局",可版本控制、可复现、免费开源。代价是只擅长结构化图(不擅数据图)、美学靠调参、要学 dot 语法。适合论文里的"模型框架/流程"辅助图,与数据图库互补——它管"结构/层次",Matplotlib 管"数值"。## 三、渲染管线与可复现性推导
dot 源 (节点/边声明)→ 布局引擎(dot 用分层 Sugiyama 算法)→ 几何坐标 → 渲染。分层布局把图排成层级:
文本即规格 → 可 diff、可复现,这是它和 Gephi(GUI)的关键区别;版本控制下结构图演进一目了然。## 四、适用场景
- 画系统结构、流程图、决策树、状态机
- 要清晰的逻辑/层次关系图
- 程序自动生成图(dot 语言)
五、优点
- ✅ 用 dot 文本描述,自动布局优雅
- ✅ 适合结构/流程/树状图
- ✅ 可版本控制、可复现
- ✅ 免费开源
六、缺点
- ⚠️ 只擅长结构化图,不擅数据图
- ⚠️ 美学靠调参,默认一般
- ⚠️ 要学 dot 语法
七、上手难度
中等
八、典型用途
- 系统结构图
- 算法/流程流程图
- 决策树展示
九、与谁搭配
模型结构用 Graphviz;数据图用 Matplotlib
十、学习资源
- Graphviz 官方文档
- dot 语言速查
本篇来自《绘图软件横评(深度版)》· 数学建模学习资料站 MCM520
实战案例
Graphviz 关系图实战
场景:需画出算法流程图或决策树结构,手写坐标太麻烦。
任务:用 DOT 语言声明节点关系自动布局。
完整代码(dot)
digraph G {
rankdir=TB;
node [shape=box, style=rounded];
start [label="开始"];
A [label="读数据"];
B [label="判断缺失?", shape=diamond];
C [label="插值补全"];
D [label="建模求解"];
end [label="输出结果"];
start -> A -> B;
B -> C [label="有"];
B -> D [label="无"];
C -> D -> end;
}
运行效果
渲染结果:
[开始]→[读数据]→[判断缺失?]
├─有→[插值补全]┐
└─无──────────┴→[建模求解]→[输出结果]
Graphviz 自动计算坐标,改结构无需手动挪位置。