【问题标题】:How do I make an undirected graph in pygraphviz?如何在 pygraphviz 中制作无向图?
【发布时间】:2012-12-31 17:11:49
【问题描述】:

我正在尝试在 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.1,它运行良好。真是奇怪的行为,不知道还能说什么。

标签: python graphviz pygraphviz


【解决方案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)

【讨论】:

    【解决方案2】:

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

    如果您使用DOT language(例如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)
    

    【讨论】:

    • 感谢您修复此棘手错误!它应该包含在 pygraphviz 库中。显示名称应将您的答案设置为解决方案!
    【解决方案3】:

    解决方案 1:

    尝试像这样链接节点: a -- b

    而不是这样:

    a -> b

    解决方案 2: 边缘[dir=none]

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

    【讨论】:

    • 问题与pygraphviz有关,语法与dot不同。
    • 这帮助我弄清楚了如何轻松绘制没有边缘的箭头
    猜你喜欢
    • 2019-05-06
    • 2013-03-05
    • 2020-07-07
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 2023-03-14
    • 2019-04-09
    相关资源
    最近更新 更多