关于python:如何在pydot中的两个子图之间添加边?

How do I add edges between two subgraphs in pydot?

有人知道如何在pydot中的两个子图(簇)之间添加边吗?

1
2
3
4
5
6
7
8
callgraph = pydot.Dot(graph_type='digraph',fontname="Verdana")
cluster_foo=pydot.Cluster('foo',label='foo')
cluster_foo.add_node(pydot.Node('foo_method_1',label='method_1'))
callgraph.add_subgraph(cluster_foo)

cluster_bar=pydot.Cluster('bar',label='Component1')
cluster_bar.add_node(pydot.Node('bar_method_a'))
callgraph.add_subgraph(cluster_bar)

我尝试过:

1
callgraph.add_edge(pydot.Edge("foo","bar"))

但不起作用。它只是在初始图中再创建两个标记为" foo "和" bar "的节点,并在它们之间放置一条边!

任何人都可以帮忙吗?


  • Graphviz要求边缘在2个群集中的节点之间。
  • 添加图形参数compound ='true'。
  • 使用边缘参数lhead =和ltail =。

因此您的代码将变为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
callgraph = pydot.Dot(graph_type='digraph', fontname="Verdana", compound='true')


cluster_foo=pydot.Cluster('foo',label='foo')
callgraph.add_subgraph(cluster_foo)

node_foo = pydot.Node('foo_method_1',label='method_1')
cluster_foo.add_node(node_foo)


cluster_bar=pydot.Cluster('bar',label='Component1')
callgraph.add_subgraph(cluster_bar)

node_bar = pydot.Node('bar_method_a')
cluster_bar.add_node(node_bar)


callgraph.add_edge(pydot.Edge(node_foo, node_bar, ltail=cluster_foo.get_name(), lhead=cluster_bar.get_name()))