我正在使用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
使用重复边生成的树
预期图:
答案 0 :(得分:1)
尝试添加constraint=False
:
A.add_edge(word_link[0], word_link[1], constraint=False, color='sienna', style='filled')
答案 1 :(得分:0)