Края между двумя подграфами в пидо - PullRequest
4 голосов
/ 05 августа 2011

Кто-нибудь знает, как добавить ребро между двумя подграфами (кластерами) в pydot?

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)

Я пытался:

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

, но не работает.Он просто создает еще два узла с пометкой «foo» и «bar» в исходном графе и вставляет их между ними!

Может кто-нибудь помочь, пожалуйста?

Спасибо!

1 Ответ

5 голосов
/ 24 августа 2011
  • Graphviz требует, чтобы ребро находилось между узлами в 2 кластерах.
  • Добавить параметр графа component = 'true'.
  • Использовать параметры ребра lhead= и ltail =.

Таким образом, ваш код станет:

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()))
...