Draw.io:使用与程序化生成 | AI生成和翻译

Home 2026.06

问题: 什么是 draw.io (diagrams.net)?如何高效使用它?

答案:

draw.io 是一款免费的开源图表绘制工具。你之所以关注它,是因为它拥有 VS Code 扩展、能导出干净的 SVG/XML,且 .drawio 格式本质就是 XML——这意味着你可以通过编程方式生成或对比图表。

运行方式

# VS Code 扩展(最适合你的工作流)
code --install-extension hediet.vscode-drawio

# 桌面应用
brew install --cask drawio

# 网页版(无需安装)
# https://app.diagrams.net

核心概念

VS Code 工作流(你的配置)

hediet.vscode-drawio 扩展允许你在 VS Code 内以可视方式编辑 .drawio 文件,或切换至 XML 模式(Ctrl+Shift+P → “Draw.io: Edit Diagram XML”)。这是强大之处——你可以直接编写/生成 XML。

编程式图表生成

由于 .drawio 是 XML,你可以通过代码生成图表:

def make_flowchart(nodes: list[dict], edges: list[tuple]) -> str:
    cells = ['<mxCell id="0"/>', '<mxCell id="1" parent="0"/>']

    for i, node in enumerate(nodes):
        nid = i + 2
        cells.append(
            f'<mxCell id="{nid}" value="{node["label"]}" '
            f'style="rounded=1;" vertex="1" parent="1">'
            f'<mxGeometry x="{node.get("x", 100)}" y="{node.get("y", i*80)}" '
            f'width="120" height="40" as="geometry"/></mxCell>'
        )

    for i, (src, dst) in enumerate(edges):
        eid = len(nodes) + 2 + i
        cells.append(
            f'<mxCell id="{eid}" edge="1" source="{src+2}" target="{dst+2}" parent="1">'
            f'<mxGeometry relative="1" as="geometry"/></mxCell>'
        )

    inner = "\n".join(cells)
    return f'''<mxGraphModel><root>{inner}</root></mxGraphModel>'''

xml = make_flowchart(
    nodes=[{"label": "Input"}, {"label": "Process"}, {"label": "Output"}],
    edges=[(0,1), (1,2)]
)
with open("diagram.drawio", "w") as f:
    f.write(xml)

导出选项

# CLI 导出(需要桌面应用或 drawio-cli)
drawio --export --format svg --output out.svg diagram.drawio
drawio --export --format png --scale 2 --output out.png diagram.drawio

Mermaid vs draw.io —— 何时使用哪种

  Mermaid draw.io
版本控制 ✅ 文本差异 ✅ XML 差异
GitHub 渲染 ✅ 在 .md 中原生支持 ✅ 使用 .drawio.svg
布局控制 ❌ 仅自动 ✅ 全手动
编程式生成 ✅ 简单字符串拼接 ✅ XML 生成
复杂图表 ❌ 变得混乱
嵌入文档

针对你的用例 —— 生成 AI 系统架构图、智能体管道或模型训练流程 —— 上述编程式 XML 生成方法扩展性很好。你可以编写一个 Python 脚本,接收系统拓扑并生成 .drawio 文件,然后在 VS Code 中完美渲染,或导出为 SVG 用于你的博客。


Back Donate