如何消除Python Diagrams中Cluster内节点的多余间距?
解决Diagrams库中Cluster内节点间距过大的问题
你用以下代码生成Cluster时,节点A、B、C、D之间出现了大量不必要的间距:
from diagrams import Diagram, Cluster, Node with Diagram('./output/output', show=False, outformat='svg') as d: with Cluster('cluster'): n1 = Node('A', height = '0.5', width = '5', labelloc = "c", fillcolor = 'purple', fontcolor = 'white', style = 'filled') n2 = Node('B', height = '0.5', width = '5', labelloc = "c", fillcolor = 'purple', fontcolor = 'white', style = 'filled') n3 = Node('C', height='0.5', width='5', labelloc="c", fillcolor='purple', fontcolor='white', style='filled') n4 = Node('D', height='0.5', width='5', labelloc="c", fillcolor='purple', fontcolor='white', style='filled')
这是因为Diagrams依赖的Graphviz默认布局会给节点预留间距,你可以通过以下几种方式消除这些间距:
方法一:调整Cluster的全局间距属性
直接在Cluster中设置Graphviz的ranksep(同层级节点垂直间距)和nodesep(节点水平间距)参数,数值越小间距越紧凑:
from diagrams import Diagram, Cluster, Node with Diagram('./output/output', show=False, outformat='svg') as d: # 在Cluster里添加graph_attr参数控制间距 with Cluster('cluster', graph_attr={"ranksep": "0.1", "nodesep": "0.1"}): n1 = Node('A', height='0.5', width='5', labelloc="c", fillcolor='purple', fontcolor='white', style='filled') n2 = Node('B', height='0.5', width='5', labelloc="c", fillcolor='purple', fontcolor='white', style='filled') n3 = Node('C', height='0.5', width='5', labelloc="c", fillcolor='purple', fontcolor='white', style='filled') n4 = Node('D', height='0.5', width='5', labelloc="c", fillcolor='purple', fontcolor='white', style='filled')
方法二:更换布局引擎
默认的dot布局会预留较多间距,换成neato或fdp这类更紧凑的布局引擎,能自动缩小节点间距:
from diagrams import Diagram, Cluster, Node # 在Diagram中指定engine参数为neato with Diagram('./output/output', show=False, outformat='svg', engine="neato") as d: with Cluster('cluster'): n1 = Node('A', height='0.5', width='5', labelloc="c", fillcolor='purple', fontcolor='white', style='filled') n2 = Node('B', height='0.5', width='5', labelloc="c", fillcolor='purple', fontcolor='white', style='filled') n3 = Node('C', height='0.5', width='5', labelloc="c", fillcolor='purple', fontcolor='white', style='filled') n4 = Node('D', height='0.5', width='5', labelloc="c", fillcolor='purple', fontcolor='white', style='filled')
方法三:用隐形边强制缩小间距
如果是垂直排列的节点间距过大,可以给节点添加隐形边,并设置边的长度参数len,手动控制间距:
from diagrams import Diagram, Cluster, Node with Diagram('./output/output', show=False, outformat='svg') as d: with Cluster('cluster'): n1 = Node('A', height='0.5', width='5', labelloc="c", fillcolor='purple', fontcolor='white', style='filled') n2 = Node('B', height='0.5', width='5', labelloc="c", fillcolor='purple', fontcolor='white', style='filled') n3 = Node('C', height='0.5', width='5', labelloc="c", fillcolor='purple', fontcolor='white', style='filled') n4 = Node('D', height='0.5', width='5', labelloc="c", fillcolor='purple', fontcolor='white', style='filled') # 设置边的长度为0.1,缩小节点间垂直间距 n1 >> {"len": "0.1"} >> n2 n2 >> {"len": "0.1"} >> n3 n3 >> {"len": "0.1"} >> n4
内容的提问来源于stack exchange,提问作者Epsi95
相关产品推荐
相关产品推荐

