簡體   English   中英

如何在pygraphviz中創建無向圖?

[英]How do I make an undirected graph in pygraphviz?

我試圖在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語言將所需的圖形類型指定為空圖形(例如graph foo {} ),並將其傳遞給AGraph的構造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)

對於Python 3.6.8和graphviz == 0.11.1

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

解決方案1:

嘗試鏈接這樣的節點:a - b

而不是像這樣:

a - > b

解決方案2:edge [dir = none]

不確定這些是否對你有所幫助,因為我已經有一段時間沒有使用graphviz而忘記了它的語法。 檢查一下,應該很容易理解: http//en.wikipedia.org/wiki/DOT_language

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM