Graphviz如何实现集群内节点垂直对齐布局
编辑补充
经过反复试错,该问题没有直接的标准答案,如有其他可行方案欢迎补充。
我最终采用的解决方式:
- 需要节点纵向逐行上下排列时,移除对应集群配置中的
rank=same语句 - 仅在需要节点水平并排显示时保留该配置
下文示例中,我移除了cluster_1内的rank=same配置即可达成预期效果。如果有其他可实现相同效果的方法,欢迎交流告知。
问题描述
我在Python环境中使用Graphviz生成SVG格式关系图,编写的dot语句可生成基础符合需求的图结构,但将节点归入指定集群后,集群内节点始终默认水平对齐。
示例场景:节点A与同层级的B、C连接(归属cluster_0集群),另一集群包含节点D、E、F,其中B与E相连。
默认生成的布局如下:
A - B - C | D - E - F
期望实现的布局效果如下:
A - B - C | D - E | F
此外还发现:当上一个集群的最后一个节点连接到下一个集群的第一个节点时,第二个集群会整体向右偏移。
初始使用的示例代码如下:
digraph digram { ordering=out; center=1; splines = ortho; node [shape=box]; nd_1 [label="A"]; nd_2 [label="B"]; nd_3 [label="C"]; nd_4 [label="D"]; nd_5 [label="E"]; nd_6 [label="F"]; nd_7 [label="G"]; nd_8 [label="H"]; subgraph cluster_0{ label ="Cluster 0"; { rank=same nd_1 nd_2 nd_3} nd_1 -> nd_2 nd_2 -> nd_3 } subgraph cluster_1{ label ="Cluster 1"; { rank=same nd_4 nd_5 nd_6 nd_7 nd_8} nd_4 -> nd_5 nd_5 -> nd_6 nd_6 -> nd_7 nd_7 -> nd_8 } nd_3-> nd_5 }
内容的提问来源于stack exchange,提问作者A3006
相关产品推荐
相关产品推荐

