1

私は JSON ファイルを読み込んでおり、単純なループを使用して pygraphviz を使用して動的にグラフを作成しています:

hostdata = []
nodes = []
edges = {}
current_host = ""
trial = pgv.AGraph(strict=False, overlap=False)
for filename in os.listdir(options.directory):
    with open(options.directory + "/" + filename, "r") as myfile:
        hostdata = Truth(myfile.read().replace('\n', ''))
    nodes.append(hostdata.host["something"])
    current_something = hostdata.host["something"]
    for key, value in hostdata.peer.iteritems():
        nodes.append(key)
        edges[current_something] = key
        trial.add_edge(current_host, key)

グラフは複雑ですが、エッジがノードを横切らないようにしたいです。厳密なオーバーラップを設定したときに試しましたが、ノードをまたぐ線がまだあります。

ノードが交差したグラフ

これは、人々がよく遭遇するもののように思えますが、私はそれについて何も見つけることができません. 私はおそらく完全に間違ったことをしているか、間違った検索用語を使用しています。どんな助けでも感謝します。

4

1 に答える 1

7

これは、graphvizのスプライン属性が原因で発生しています。

デフォルトでは、属性は設定されていません。これがどのように解釈されるかは、レイアウトによって異なります。ドットの場合、デフォルトではエッジをスプラインとして描画します。他のすべてのレイアウトでは、デフォルトでエッジが線分として描画されます。これらの後者のレイアウトでは、splines="true" の場合、重複しないノードが必要であることに注意してください (オーバーラップを参照)。レイアウトに fdp が使用され、splines="compound" の場合、クラスターとノードを避けるためにエッジが描画されます。

名前付き引数として提供すると、問題が解決するはずです。

trial = pgv.AGraph(strict=False, overlap=False, splines='true')
#or   
trial = pgv.AGraph(strict=False, overlap=False, splines='spline')
于 2015-11-24T22:21:11.503 に答える