我试图在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 :(得分: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)
答案 1 :(得分:0)
对于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 :(得分:-1)
可能存在旧问题,但由于缺少答案,我将尝试提供一种调试方法。 为了生成无向图,您在代码方面做得正确。明显。
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并设置新环境,或者在另一台机器上进行测试。这可能是显而易见的。
答案 3 :(得分:-2)
解决方案1:
尝试链接这样的节点: a - b
而不是这样:
a - > B'/ P>
解决方案2: 边缘[DIR =无]
不确定这些是否对您有所帮助,因为我已经使用了graphviz很长一段时间而忘记了它的语法。看看这个,应该很容易理解:http://en.wikipedia.org/wiki/DOT_language