2013-01-17 34 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并设置一个新的环境,完全在另一台机器上测试或者其他。这可能是显而易见的。