资讯中心

diagrams 如何用 >> << - 运算符控制节点连接方向?

📅 2026/9/27 21:56:59
diagrams 如何用 >> << - 运算符控制节点连接方向?
diagrams 如何用 - 运算符控制节点连接方向【免费下载链接】diagrams:art: Diagram as Code for prototyping cloud system architectures项目地址: https://gitcode.com/GitHub_Trending/di/diagrams在 diagramsDiagram as Code for prototyping cloud system architectures中图与图之间不画线、不拖框节点之间的数据流完全由 Python 运算符表达、、-。当你用 Python 代码描述一套系统架构例如流量从负载均衡器流向 Web 服务器、再流向数据库时每条连接用哪个运算符就决定了生成的图里箭头朝哪个方向、或者干脆不带方向。本文按照项目文档把安装、编写、运行和验证这条路径走一遍并说明-与移位运算符混用时的优先级陷阱、以及控制整体布局方向的direction参数。准备环境先装 Graphviz再装 diagramsdiagrams 用 Graphviz 渲染图形所以 Graphviz 是硬性前提。按 安装文档Python 版本安装文档页要求Python 3.7 或更高而 README 的徽章标注为≥3.9。两处表述不一致建议以较新的 3.9 为准检查本机版本。安装 GraphvizmacOS 用 Homebrew 执行brew install graphvizWindows 若已装 Chocolatey执行choco install graphviz其他平台按 Graphviz 官方说明安装。安装 diagrams三选一# using pip (pip3) $ pip install diagrams # using pipenv $ pipenv install diagrams # using poetry $ poetry add diagrams三个连接运算符各自代表什么docs/guides/node.md 对三个运算符的定义是把节点按左到右方向连接把节点按右到左方向连接-连接节点但无方向undirected。一个同时使用三种运算符的最小完整脚本如下代码来自 node.mdfrom diagrams import Diagram from diagrams.aws.compute import EC2 from diagrams.aws.database import RDS from diagrams.aws.network import ELB from diagrams.aws.storage import S3 with Diagram(Web Services, showFalse): ELB(lb) EC2(web) RDS(userdb) S3(store) ELB(lb) EC2(web) RDS(userdb) EC2(stat) (ELB(lb) EC2(web)) - EC2(web) RDS(userdb)三行分别覆盖整条单向链路、链路末端反方向流入、以及先无方向连接再接单向链的混合写法。运行脚本并核对生成结果按 docs/getting-started/installation.md 的做法把脚本保存为diagram.py后执行$ python diagram.py预期行为见 docs/guides/diagram.md 和安装文档Diagram构造函数的第一个参数用于生成输出文件名Diagram(Web Services, ...)会在当前工作目录生成web_services.png默认会立即打开生成的图片show默认为 true上面的脚本显式传了showFalse只落盘不自动打开方便你手动检查文件输出格式由outformat参数控制默认为 png允许值为 png、jpg、svg、pdf、dot也可以传列表一次输出多种格式。上面脚本对应的渲染结果文档示例图核对方式打开生成的 png检查每条边的箭头朝向是否与代码中的运算符一致——从左指向右从右指向左-两边都没有箭头。在 Jupyter notebook 中可以直接渲染而不依赖自动打开文件写法见 diagram.mdfrom diagrams import Diagram from diagrams.aws.compute import EC2 with Diagram(Simple Diagram) as diag: EC2(web) diag两个影响方向的坑运算符优先级与渲染顺序-和移位运算符混用时注意 Python 运算符优先级。node.md 明确警告-与/混用可能因 Python 的运算符优先级产生意外结果必要时要用括号。上面脚本第三行就是官方给出的加括号写法(ELB(lb) EC2(web)) - EC2(web) RDS(userdb)即先把部分括起来再接无方向的-。如果你发现某段连接的方向和预期不符先检查这一行是否少写了括号。渲染顺序与声明顺序相反。node.md 指出The order of rendered diagrams is the reverse of the declaration order. 也就是说代码里先写的连接在图上呈现的位置偏后。这是文档明示的行为写多条连接时按这个规律对照检查即可不必当成 bug。可选用 direction 参数改变整体布局单个连接的方向由运算符决定整张图的布局方向由Diagram的direction参数控制默认为LR允许值TB、BT、LR、RL见 node.md。官方示例把 5 个 worker 垂直排布from diagrams import Diagram from diagrams.aws.compute import EC2 from diagrams.aws.database import RDS from diagrams.aws.network import ELB with Diagram(Workers, showFalse, directionTB): lb ELB(lb) db RDS(events) lb EC2(worker1) db lb EC2(worker2) db lb EC2(worker3) db lb EC2(worker4) db lb EC2(worker5) db注意即使directionTB节点之间的仍然表示左到右的连接语义direction只改变布局走向不改变运算符本身的含义。连接冗余较多时可以把中间节点写成列表一次连完这是 node.md 给出的简化写法with Diagram(Grouped Workers, showFalse, directionTB): ELB(lb) [EC2(worker1), EC2(worker2), EC2(worker3), EC2(worker4), EC2(worker5)] RDS(events)文档同时给出一条限制两个 list 不能直接互连因为 Python 不允许对列表做移位/算术运算。即[A, B] [C, D]这种写法行不通。可选给连接加标签和颜色运算符决定方向边的外观label、color、style对应 Graphviz 边属性由Edge对象承担用法见 docs/guides/edge.md。Edge同样嵌在//-之间metrics Prometheus(metric) metrics Edge(colorfirebrick, styledashed) Grafana(monitoring) aggregator Fluentd(logging) aggregator \ Edge(labelparse) \ Kafka(stream) \ Edge(colorblack, stylebold) \ Spark(analytics)也就是说方向逻辑不变只是把“一条边”替换成“一条带属性的边”。小结与下一步按运算符选方向数据从左流向右用反方向用无方向关系用--与移位运算符混写时加括号渲染顺序与代码声明顺序相反整图布局用directionTB/BT/LR/RL默认 LR。更多组合案例可以看 examples 页面其中 “Stateful Architecture on Kubernetes” 一节同时用到了、-、混写的完整示例边的完整属性说明见 docs/guides/edge.md。【免费下载链接】diagrams:art: Diagram as Code for prototyping cloud system architectures项目地址: https://gitcode.com/GitHub_Trending/di/diagrams创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

看完文章,想为自己的企业也做一次专业网站诊断?

尧图顾问免费为您评估现有网站,并给出建站/改版建议与报价方案。

免费获取方案