我刚刚开始使用networkx并使用它来构建有根树。抱歉,如果这是一个微不足道的问题,我无法在其他地方找到解决方案。使用以下代码,我得到错误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.
由于
答案 0 :(得分:2)
这是由于两件事:1)graphviz安装不正确,从头开始重新安装清除了错误。
其次,行
pos=nx.graphviz_layout(G,prog='dot')
在绘制图形之前,必须始终放置(并重复),以计算新的节点/边缘。