私は PyGraphviz を使用して、いくつかのレベルとノードを持つ構造のような階層ツリーを生成しています。2 つのノード間にエッジを作成しようとするたびに (ツリー内のすべてのノードに一意のインデックスが割り当てられています)、Pygraphviz は実際のノード値とインデックスの両方を考慮して 2 つのエッジを生成しますが、期待しているのはエッジのみを作成するためです。ノードの一意のインデックス間。以下のサンプルコードと図を見てください。
サンプルコード:
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
重複したエッジで生成されたツリー
期待値: