使用 nx.draw_graphviz 在 python 中的 graphviz 布局中绘制图形给出错误
Posted
技术标签:
【中文标题】使用 nx.draw_graphviz 在 python 中的 graphviz 布局中绘制图形给出错误【英文标题】:Drawing graph in graphviz layout in python using nx.draw_graphviz gives error 【发布时间】:2015-12-11 18:59:37 【问题描述】:我正在尝试在 python 的 networkx 的 graphviz 布局中绘制一个 100 节点的多图 G,所以到目前为止我进行了两次试验:
试用 1 nx.draw_graphviz 函数如下 nx.draw_graphviz(G)
但我得到以下错误 repeated for all nodes 在图中:
错误:节点 1,位置 [0.127506302389087, 0.3262608552621944],预计两个双打
然后试图找出一个解决方案,我使用 trial 2 A=nx.to_agraph(G)
获取 pygraphviz 图表,但是当我尝试使用 nx.draw_graphviz(A)
绘制时,我收到以下错误:
AttributeError: 'AGraph' 对象没有属性 'number_of_selfloops'
nx.graphviz_layout 但它返回了一个由节点键入的位置字典,我不知道如何使用它来绘制 graphviz 布局。
注意我导入了 graphviz、pygraphviz 和 pydot 模块,但我不知道哪些是真正需要的,但它仍然不起作用。
在graphviz布局中绘制networkx图有什么遗漏吗?
完整的错误跟踪
试用 1
Traceback (most recent call last):
File "main.py", line 102, in <module>
d.display_graph(sub_normal,NEUTRAL_RANGE)
File "/home/abdallah/stage/Reputation_system/display.py", line 33, in display_graph
nx.draw_graphviz(G)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pylab.py", line 982, in draw_graphviz
pos = nx.drawing.graphviz_layout(G, prog)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pydot.py", line 257, in graphviz_layout
return pydot_layout(G=G,prog=prog,root=root,**kwds)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pydot.py", line 277, in pydot_layout
D=P.create_dot(prog=prog)
File "/usr/lib/python2.7/dist-packages/pydot.py", line 1802, in <lambda>
lambda f=frmt, prog=self.prog : self.create(format=f, prog=prog))
File "/usr/lib/python2.7/dist-packages/pydot.py", line 2023, in create
status, stderr_output) )
pydot.InvocationException: Program terminated with status: 1. stderr follows: Error: node 0, position [0.7145101895899024, 0.9016482786797262], expected two doubles
试用 2
Traceback (most recent call last):
File "main.py", line 102, in <module>
d.display_graph(sub_normal,NEUTRAL_RANGE)
File "/home/abdallah/stage/Reputation_system/display.py", line 33, in display_graph
nx.draw_graphviz(A)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pylab.py", line 982, in draw_graphviz
pos = nx.drawing.graphviz_layout(G, prog)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pydot.py", line 257, in graphviz_layout
return pydot_layout(G=G,prog=prog,root=root,**kwds)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pydot.py", line 273, in pydot_layout
P=to_pydot(G)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pydot.py", line 192, in to_pydot
strict=N.number_of_selfloops()==0 and not N.is_multigraph()
AttributeError: 'AGraph' object has no attribute 'number_of_selfloops'
【问题讨论】:
python和networkx有哪些版本? Python 2.7.6,至于 Networkx 我想是 1.9.1(但我不确定,因为我不知道如何获取它) 到目前为止我还没有什么好主意。你能给出错误的完整回溯吗? 我编辑了问题,在试验 1 和试验 2(我使用 nx.to_agraph 函数)这两种情况下都包含完整的追溯错误 这使它成为一个“不能再被复制”的问题。所以应该关闭。你应该删除它。 【参考方案1】:我使用了 graphviz_layout 并且成功了,这是我的 Python 示例:
try:
import pygraphviz
from networkx.drawing.nx_agraph import graphviz_layout
except ImportError:
try:
import pydotplus
from networkx.drawing.nx_pydot import graphviz_layout
except ImportError:
raise ImportError("This example needs Graphviz and either "
"PyGraphviz or PyDotPlus")
import networkx as nx
plt.figure(figsize=(6,8))
pos=graphviz_layout(G)
nx.draw_networkx_nodes(G,pos,nodelist=G.nodes(),node_size=node_sizes,\
linewidths=0.1,vmin=0,vmax=1,alpha=0.8,\
node_color=[D[n] for n in G.nodes()])
nx.draw_networkx_edges(G,pos,edgelist=G.edges(),width=0.1,\
edge_color="black",alpha=0.6)
plt.axis('off')
plt.tight_layout()
plt.show()
这是另一个使用 Networkx 网站上的 graphviz_layout 的示例
https://networkx.github.io/documentation/networkx-1.10/examples/drawing/lanl_routes.html
【讨论】:
以上是关于使用 nx.draw_graphviz 在 python 中的 graphviz 布局中绘制图形给出错误的主要内容,如果未能解决你的问题,请参考以下文章
python remove_whitespace_and_escapes_python
opencv-PIL-matplotlib-Skimage-Pytorch图片读取区别与联系
python 来自https://stackoverflow.com/questions/23602412/only-download-a-part-of-the-document-using-pyt
python 转储和加载稀疏矩阵https://stackoverflow.com/questions/11129429/storing-numpy-sparse-matrix-in-hdf5-pyt
BST插值建树re-balance再平衡构建AVL(Adelson-Velskii & Landis)平衡二叉搜索树,基于networkxbinarytree,implement by Pyt
BST插值建树re-balance再平衡构建AVL(Adelson-Velskii & Landis)平衡二叉搜索树,基于networkxbinarytree,implement by Pyt