5

pygraphvizで無向グラフを生成しようとしていますが、失敗しました。私が何をしても、グラフは常に方向付けられているように見えます。

Example #1
G = pgv.AGraph(directed=False)
G.is_directed()  # true

Example #2
G = pgv.AGraph()
G.to_undirected().is_directed()  # True

Example #3
G = pgv.AGraph(directed=False)
G.graph_attr.update(directed=False)
G.is_directed()  # true

どうしてこんなに些細なことがうまくいかなかったのか、私にはわかりません。私が間違っていることは何ですか?

4

3 に答える 3

2

pygraphviz 1.2でも同じ問題が発生していますが、回避策があります。

DOT言語(例)を使用して目的のグラフタイプを空のグラフとして指定し、graph foo {}それをのコンストラクターに渡すとAGraph、pygraphvizはグラフタイプを尊重しますが、キーワード引数として指定された場合は無視される可能性があります(私のように)環境)。

>>> import pygraphviz as pgv
>>> foo = pgv.AGraph('graph foo {}')
>>> foo.is_directed()
False
>>> foo.add_edge('A', 'B')
>>> print foo
graph foo {
        A -- B;
}

回避策はstrict引数に対しても機能しますが、これも私の環境では無視されています。

pgv.AGraph同じAPIを使用する代わりに、次の関数を使用します。

def AGraph(directed=False, strict=True, name='', **args):
    """Fixed AGraph constructor."""

    graph = '{0} {1} {2} {{}}'.format(
        'strict' if strict else '',
        'digraph' if directed else 'graph',
        name
    )

    return pgv.AGraph(graph, **args)
于 2013-11-29T02:04:07.387 に答える
1

Python3.6.8およびgraphviz==0.11.1の場合

シンプルGraph()は私のために働いた。

from graphviz import *
dot = Graph()
dot.node('1', 'King Arthur')
dot.node('2', 'Sir Bedevere the Wise')
dot.node('3', 'Sir Lancelot the Brave')

dot.edges(['12', '13', '23'])

dot.render(view=True)
于 2019-08-09T16:46:58.727 に答える
-1

解決策1:

次のようにノードをリンクしてみてください:a --b

このような代わりに:

a-> b

解決策2:edge [dir = none]

私はgraphvizをかなり長い間使用しておらず、その構文を忘れているので、これらがあなたに役立つかどうかはわかりません。これもチェックしてください。理解しやすいはずです:http://en.wikipedia.org/wiki/DOT_language

于 2013-01-17T07:58:31.937 に答える