0

我正在使用 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

使用重复边生成的树 在此处输入图像描述

预期数字: 在此处输入图像描述

4

2 回答 2

1

尝试添加constraint=False

A.add_edge(word_link[0], word_link[1], constraint=False, color='sienna', style='filled')
于 2013-04-05T23:12:59.707 回答
0

您也可以尝试定义等级(级别)

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

Pygraphviz / networkx 设置节点级别或层

于 2014-03-11T13:11:56.043 回答