Graphviz:基于 DOT 代码绘图,无需拖拽,自动生成拓扑与架构图

介绍

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 文件)

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内置多种自动布局算法,根据图复杂度选择:

  1. dot(默认)
    层级布局,适合流程图、架构图、依赖树(从上至下分层)。绝大多数场景首选。
  2. neato
    力导向布局,适合无向网状图、社交网络。
  3. fdp
    改进版力导向,适合更大规模网络图。
  4. circo
    环形布局,节点排成圆环。
  5. twopi
    放射状布局(中心节点向外辐射,星形拓扑)

调用方式示例(命令行):

# 使用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:
    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,语法不同

原文出处:/show_1GW3kgJA1HsS.html