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给环境)。

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

对于 Python 3.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:边缘[dir=none]

不确定这些是否对您有帮助,因为我已经有一段时间没有使用 graphviz 并且忘记了它的语法。也检查一下,应该很容易理解:http ://en.wikipedia.org/wiki/DOT_language

于 2013-01-17T07:58:31.937 回答