2013-01-17 35 views
4

我想在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 

我不知道爲什麼這麼平凡的東西不能工作。我做錯了什麼?

+0

您發佈的示例對我來說工作得很好。你使用的是什麼版本的pygraphviz? – Maehler

+0

1.1。修訂版1952 –

+1

我使用的是1.1版,並且工作正常。真的很奇怪的行爲,不知道還有什麼要說的。 – Maehler

回答

-1

解決方案1:

嘗試連接這樣的節點: 一個 - B

代替這樣的:

甲 - >乙

解決方案2: 邊緣[目錄=無]

不知道這些對你有幫助,因爲我沒有使用graphviz很長一段時間,忘記了它的s yntax。檢查了這一點,應該很容易理解:http://en.wikipedia.org/wiki/DOT_language

+0

這個問題是關於pygraphviz的,語法和'dot'不一樣。 – Maehler

1

我在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) 
0

老問題可能是,但因爲它缺少一個答案,我將試圖提供一種方法來調試這一點。 爲了生成無向圖,您正在按代碼進行正確的操作。明顯。

def is_directed(self): 
    """Return True if graph is directed or False if not.""" 
    if gv.agisdirected(self.handle) == 1: 
     return True 
    else: 
     return False 

來自agraph.py

一個想法是在該函數上設置一個斷點,然後檢查變量。 這假定您提供的代碼是唯一涉及的代碼。

你也可以嘗試使用virtualenv並設置一個新的環境,完全在另一臺機器上測試或者其他。這可能是顯而易見的。