3

networkxを使い始めたばかりで、rootedツリーを構築するために使用しています。これが些細な質問である場合はお詫び申し上げます。他の場所で解決策を見つけることができませんでした。次のコードを使用すると、エラーnetworkx.exception.NetworkXErrorが発生します。ノード4には位置がありません。(draw_networkx_nodes内)。

import networkx as nx 
import matplotlib.pyplot as plt
G = nx.DiGraph() 
G.add_node(1)
G.add_node(2)
G.add_node(3)
G.add_node(4)
G.add_node(5)
G.add_node(6)
G.add_edge(1,2) 
G.add_edge(1,3)
G.add_edge(2,5)
G.add_edge(2,6)
G.add_edge(3,4)
plt.title("Test") 
pos=nx.graphviz_layout(G,prog='dot') 
nx.draw(G,pos,with_labels=False,arrows=False) 
plt.savefig('nx_test.png') 

これは、ノード4を作成するとすぐに発生します。たとえば、ノード1から4、エッジ1、2、1、3、2、4がある場合、同じエラーが発生します。ノード4ができるまでコードは正常に機能します(3つのノードでうまく機能します)。これは、エッジを指定する順序に関係なく発生します。

エッジを直接指定すると、同じエラーが発生します。

    >>> G4 = nx.DiGraph([(1, 2), (1, 3), (2, 5), (2, 6), (3, 4)])
    >>> nx.draw(G4,pos,with_labels=False,arrows=False) 


    Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
      File "/usr/local/lib/python2.7/dist-packages/networkx-1.7-py2.7.egg/networkx/drawing/nx_pylab.py", line 133, in draw
        draw_networkx(G,pos=pos,ax=ax,**kwds)
      File "/usr/local/lib/python2.7/dist-packages/networkx-1.7-py2.7.egg/networkx/drawing/nx_pylab.py", line 266, in draw_networkx
        node_collection=draw_networkx_nodes(G, pos, **kwds)
      File "/usr/local/lib/python2.7/dist-packages/networkx-1.7-py2.7.egg/networkx/drawing/nx_pylab.py", line 373, in draw_networkx_nodes
        raise nx.NetworkXError('Node %s has no position.'%e)
       networkx.exception.NetworkXError: Node 4 has no position.

ありがとう

4

1 に答える 1

2

これは2つの理由によるものでした:1)graphvizの誤ったインストール、最初から再インストールするとエラーがクリアされました。

第二に、ライン

       pos=nx.graphviz_layout(G,prog='dot') 

新しいノード/エッジを考慮して、グラフを描画する直前に常に配置(および繰り返し)する必要があります。

于 2012-12-24T10:49:18.490 に答える