我试图在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

我不知道为什么如此琐碎的事情不能奏效。我做错了什么?

最佳答案

我在pygraphviz 1.2上遇到了同样的问题,但是我有一个解决方法。

如果您使用DOT language(例如graph foo {})将所需的图形类型指定为空图形,并将其传递给AGraph的构造函数,则pygraphviz会尊重该图形类型,即使当作为关键字参数给出时它可能会忽略它(如on我的环境)。

>>> 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)

10-08 09:42