Pygraphviz中创建的重复边

时间:2013-04-05 22:29:13

标签: python python-2.7 tree graphviz pygraphviz

我正在使用PyGraphviz生成一个具有多个级别和节点的分层树状结构。每当我尝试在两个节点之间创建边缘时(我将唯一索引分配给树中的每个节点),Pygraphviz会生成两条边,同时考虑实际节点值和索引,而我期待它,只创建边缘节点唯一索引之间。请查看示例代码和下图。

示例代码:

from pygraphviz import *

word_link = []
A = AGraph(directed=True)
ind = 0
A.add_node(ind, color='lightskyblue', style='filled', label='Root', shape='box')
sen_ind = ind + 1
# sentence 1
A.add_node(sen_ind, color='lightcoral', style='filled', label=0, shape='box')
A.add_edge(ind, sen_ind, color='plum', style='filled')
word_ind = sen_ind + 1
# word 1
A.add_node(word_ind, color='lightsalmon', style='filled', shape='box', label=0)
word_link.append(word_ind)
A.add_edge(sen_ind, word_ind, color='plum', style='filled')
word_ind += 1
# word 2
A.add_node(word_ind, color='lightsalmon', style='filled', shape='box', label=1)
A.add_edge(sen_ind, word_ind, color='plum', style='filled')
sen_ind = word_ind + 1
# sentence 2
A.add_node(sen_ind, color='lightcoral', style='filled', label=1, shape='box')
A.add_edge(ind, sen_ind, color='plum', style='filled')
word_ind = sen_ind + 1
# word 1
A.add_node(word_ind, color='lightsalmon', style='filled', label=0, shape='box')
A.add_edge(sen_ind, word_ind, color='plum', style='filled')
word_ind += 1
# word 2
A.add_node(word_ind, color='lightsalmon', style='filled', label=1, shape='box')
word_link.append(word_ind)
A.add_edge(sen_ind, word_ind, color='plum', style='filled')

# doesn't work | need a fix
A.add_edge(word_link[0], word_link[1], color='sienna', style='filled')

A.layout()  # layout with default (neato)
A.draw('simple.png',prog='dot') # draw png

使用重复边生成的树 enter image description here

预期图: enter image description here

2 个答案:

答案 0 :(得分:1)

尝试添加constraint=False

A.add_edge(word_link[0], word_link[1], constraint=False, color='sienna', style='filled')

答案 1 :(得分:0)

您还可以尝试定义排名(级别)

看到这个答案另一个用途给了我一个类似的问题:

Pygraphviz / networkx set node level or layer