pygraphviz 1.5 默认边缘没有箭头?
pygraphviz 1.5 default edge no arrow?
我已经使用这里的轮子更新到 pygraphviz 1.5 Installing pygraphviz on Windows 10 64-bit, Python 3.6。
我遇到了问题。
import pygraphviz as pgv
G = pgv.AGraph()
G.add_node('a')
G.add_node('b')
G.add_edge('a', 'b')
g_string = G.string()
print(g_string)
给我
strict digraph {
a -- b;
}
而之前版本 1.3 上的相同代码 运行 给了我
strict digraph {
a -> b;
}
我什至试过了
G.add_edge('a', 'b', arrowhead="normal")
给出 a -- b [arrowhead=normal];
但没有箭头绘制。
我是 运行 graphviz 2.38
。
pygraphviz 1.3
于 python 2.7。
pygraphviz 1.5
在 python 3.6.
作为文档 state,默认情况下 AGraph 是无向的。您必须在图形构造期间指定 directed=True
属性:
>>> G = pgv.AGraph(directed=True)
>>> G.add_node('a')
>>> G.add_node('b')
>>> G.add_edge('a', 'b')
>>> g_string = G.string()
>>>
>>> print(g_string)
strict digraph "" {
a -> b;
}
我想首先指出,为了让这个例子工作,安装 PyGraphviz 模块是不够的 (检查 [SO]: Installing pygraphviz on Windows 10 64-bit, Python 3.6 (@CristiFati's answer)),但还需要 Graphviz 版本,因为 PyGraphviz 使用其工具之一(称为 nop)。
可以下载了,反正我是自己编译的(32位,不过没关系)
此外,我测试了 2 .whls:
- 一个(我已经)为 Python 3.6(64 位)
- 一个专为 Python 2.7(64 位)
因为有可能我必须修改它们(出于调试目的),所以我没有 pip install
它们,而是在 cwd 中解压它们(这需要一些额外的代码):
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q055196206]> dir /b
code00.py
pygraphviz131_27
pygraphviz15_36
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q055196206]> tree /a
Folder PATH listing for volume Work
Volume serial number is 3655-6FED
E:.
+---pygraphviz131_27
| \---pygraphviz
| \---tests
\---pygraphviz15_36
\---pygraphviz
\---tests
code00.py:
#!/usr/bin/env python3
import sys
# @TODO - cfati: The 5 lines below are because I unpacked the 2 `.whl`s in the current dir, instead of `pip install`ing them
maj, min = sys.version_info[:2]
if maj == 3 and min == 6:
sys.path.insert(0, "pygraphviz15_36")
elif maj == 2 and min == 7:
sys.path.insert(0, "pygraphviz131_27")
# @TODO end
import pygraphviz as pgv
def main():
print(pgv)
g = pgv.AGraph(directed=len(sys.argv) > 1)
g.add_node("a")
g.add_node("b")
g.add_edge("a", "b")
#print(dir(g))
g_string = g.string() # Nice var name, btw :)
print(g_string)
if __name__ == "__main__":
print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
main()
输出:
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q055196206]> set PATH=%PATH%;e:\Work\Dev\Fati\WinBuild\graphviz\src\graphviz\Release\Graphviz\bin
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q055196206]> "e:\Work\Dev\VEnvs\py_064_02.07.15_test0\Scripts\python.exe" code00.py
Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:30:26) [MSC v.1500 64 bit (AMD64)] on win32
<module 'pygraphviz' from 'pygraphviz131_27\pygraphviz\__init__.pyc'>
strict digraph {
a -> b;
}
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q055196206]> "e:\Work\Dev\VEnvs\py_064_03.06.08_test0\Scripts\python.exe" code00.py
Python 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)] on win32
<module 'pygraphviz' from 'pygraphviz15_36\pygraphviz\__init__.py'>
strict graph "" {
a -- b;
}
可以看出,问题很容易重现。现在,输出 -- vs. -> 看起来 我如何表示无向 vs. 有向图边 。我查看了源代码,发现了一些奇怪的东西。
[GitHub.PyGraphviz 1.5]: class AGraph(thing=None, filename=None, data=None, string=None, handle=None, name='', strict=True, directed=False, **attr) 有 directed=False
参数。将其设置为 True,解决了问题。
输出:
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q055196206]> "e:\Work\Dev\VEnvs\py_064_02.07.15_test0\Scripts\python.exe" code00.py dummy_arg
Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:30:26) [MSC v.1500 64 bit (AMD64)] on win32
<module 'pygraphviz' from 'pygraphviz131_27\pygraphviz\__init__.pyc'>
strict digraph {
a -> b;
}
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q055196206]> "e:\Work\Dev\VEnvs\py_064_03.06.08_test0\Scripts\python.exe" code00.py dummy_arg
Python 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)] on win32
<module 'pygraphviz' from 'pygraphviz15_36\pygraphviz\__init__.py'>
strict digraph "" {
a -> b;
}
我说我发现了一些奇怪的东西:嗯,对于 PyGraphviz 1.3.1 事情是一样的: directed=False
(代码 和 文档),但它以某种方式初始化图 ,因为它会被引导 。
快速检查 agraph.py(在 2 个软件包版本上)并没有揭示这种差异的来源,所以我可以放心地假设这是因为Graphviz 2 个 PyGraphviz 版本构建的包版本。
尽管如此,PyGraphviz 1.5(由我构建)行为是正确的。
我已经使用这里的轮子更新到 pygraphviz 1.5 Installing pygraphviz on Windows 10 64-bit, Python 3.6。
我遇到了问题。
import pygraphviz as pgv
G = pgv.AGraph()
G.add_node('a')
G.add_node('b')
G.add_edge('a', 'b')
g_string = G.string()
print(g_string)
给我
strict digraph {
a -- b;
}
而之前版本 1.3 上的相同代码 运行 给了我
strict digraph {
a -> b;
}
我什至试过了
G.add_edge('a', 'b', arrowhead="normal")
给出 a -- b [arrowhead=normal];
但没有箭头绘制。
我是 运行 graphviz 2.38
。
pygraphviz 1.3
于 python 2.7。
pygraphviz 1.5
在 python 3.6.
作为文档 state,默认情况下 AGraph 是无向的。您必须在图形构造期间指定 directed=True
属性:
>>> G = pgv.AGraph(directed=True)
>>> G.add_node('a')
>>> G.add_node('b')
>>> G.add_edge('a', 'b')
>>> g_string = G.string()
>>>
>>> print(g_string)
strict digraph "" {
a -> b;
}
我想首先指出,为了让这个例子工作,安装 PyGraphviz 模块是不够的 (检查 [SO]: Installing pygraphviz on Windows 10 64-bit, Python 3.6 (@CristiFati's answer)),但还需要 Graphviz 版本,因为 PyGraphviz 使用其工具之一(称为 nop)。
可以下载了,反正我是自己编译的(32位,不过没关系)
此外,我测试了 2 .whls:
- 一个(我已经)为 Python 3.6(64 位)
- 一个专为 Python 2.7(64 位)
因为有可能我必须修改它们(出于调试目的),所以我没有 pip install
它们,而是在 cwd 中解压它们(这需要一些额外的代码):
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q055196206]> dir /b code00.py pygraphviz131_27 pygraphviz15_36 [cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q055196206]> tree /a Folder PATH listing for volume Work Volume serial number is 3655-6FED E:. +---pygraphviz131_27 | \---pygraphviz | \---tests \---pygraphviz15_36 \---pygraphviz \---tests
code00.py:
#!/usr/bin/env python3
import sys
# @TODO - cfati: The 5 lines below are because I unpacked the 2 `.whl`s in the current dir, instead of `pip install`ing them
maj, min = sys.version_info[:2]
if maj == 3 and min == 6:
sys.path.insert(0, "pygraphviz15_36")
elif maj == 2 and min == 7:
sys.path.insert(0, "pygraphviz131_27")
# @TODO end
import pygraphviz as pgv
def main():
print(pgv)
g = pgv.AGraph(directed=len(sys.argv) > 1)
g.add_node("a")
g.add_node("b")
g.add_edge("a", "b")
#print(dir(g))
g_string = g.string() # Nice var name, btw :)
print(g_string)
if __name__ == "__main__":
print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
main()
输出:
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q055196206]> set PATH=%PATH%;e:\Work\Dev\Fati\WinBuild\graphviz\src\graphviz\Release\Graphviz\bin [cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q055196206]> "e:\Work\Dev\VEnvs\py_064_02.07.15_test0\Scripts\python.exe" code00.py Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:30:26) [MSC v.1500 64 bit (AMD64)] on win32 <module 'pygraphviz' from 'pygraphviz131_27\pygraphviz\__init__.pyc'> strict digraph { a -> b; } [cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q055196206]> "e:\Work\Dev\VEnvs\py_064_03.06.08_test0\Scripts\python.exe" code00.py Python 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)] on win32 <module 'pygraphviz' from 'pygraphviz15_36\pygraphviz\__init__.py'> strict graph "" { a -- b; }
可以看出,问题很容易重现。现在,输出 -- vs. -> 看起来 我如何表示无向 vs. 有向图边 。我查看了源代码,发现了一些奇怪的东西。
[GitHub.PyGraphviz 1.5]: class AGraph(thing=None, filename=None, data=None, string=None, handle=None, name='', strict=True, directed=False, **attr) 有 directed=False
参数。将其设置为 True,解决了问题。
输出:
[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q055196206]> "e:\Work\Dev\VEnvs\py_064_02.07.15_test0\Scripts\python.exe" code00.py dummy_arg Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:30:26) [MSC v.1500 64 bit (AMD64)] on win32 <module 'pygraphviz' from 'pygraphviz131_27\pygraphviz\__init__.pyc'> strict digraph { a -> b; } [cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q055196206]> "e:\Work\Dev\VEnvs\py_064_03.06.08_test0\Scripts\python.exe" code00.py dummy_arg Python 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)] on win32 <module 'pygraphviz' from 'pygraphviz15_36\pygraphviz\__init__.py'> strict digraph "" { a -> b; }
我说我发现了一些奇怪的东西:嗯,对于 PyGraphviz 1.3.1 事情是一样的: directed=False
(代码 和 文档),但它以某种方式初始化图 ,因为它会被引导 。
快速检查 agraph.py(在 2 个软件包版本上)并没有揭示这种差异的来源,所以我可以放心地假设这是因为Graphviz 2 个 PyGraphviz 版本构建的包版本。
尽管如此,PyGraphviz 1.5(由我构建)行为是正确的。