2015-09-15 177 views
4

我想在Python的networkx绘制在graphviz的布局100节点多图G,所以我做了两个试验至今:使用nx.draw_graphviz python中绘制图表的graphviz中的布局提供了错误

试用1nx.draw_graphviz功能如下nx.draw_graphviz(G)但我得到以下错误重复图中的所有节点

Error: node 1, position [0.127506302389087, 0.3262608552621944], expected two doubles

然后试图找出我用试验2 0的溶液获得pygraphviz图,但是当我尝试nx.draw_graphviz(A)画出我收到以下错误:

AttributeError: 'AGraph' object has no attribute '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' 
+0

什么Python和networkx的版本? – Joel

+0

Python 2.7.6,对于Networkx我想它是1.9.1(但我不确定,因为我不知道如何得到它) –

+1

'nx .__ version__' – Joel

回答

0

我用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() 

这里使用graphviz_layout从Networkx网站另一个例子

https://networkx.github.io/documentation/networkx-1.10/examples/drawing/lanl_routes.html