networkx - 未知节点位置错误

3

我刚开始使用networkx,并使用它来构建根树。如果这是一个微不足道的问题,对不起,我没有找到其他解决方案。使用以下代码时,我会得到错误信息networkx.exception.NetworkXError: Node 4 has no position. (in 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时,我会得到相同的错误。代码在有3个节点时运行良好,但一旦添加第4个节点,问题就出现了。无论我指定边缘的顺序如何,都会出现这种情况。
如果我直接指定边缘,我会得到相同的错误:
    >>> 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.

谢谢


1
对我来说运行良好 - 如果您只是从边缘构建,例如:G = nx.DiGraph([(1, 2), (1, 3), (2, 5), (2, 6), (3, 4)]),您是否得到相同的结果?(注:更改了缩进以便更轻松地复制/粘贴) - Jon Clements
1
啊 - 所以与节点无关 - 图形没问题 - 画图不正常 - 因此,“只要我创建节点4就会发生这种情况”实际上并不是这样。 - Jon Clements
是的。以下代码有效:如上所述的初始化 G.add_node(1) G.add_node(2) G.add_node(3) G.add_edge(1,2) G.add_edge(1,3) 如上所述的绘图。这也有效 G = nx.DiGraph([(1, 2), (1, 3)]) - user1018513
1
打印pos字典并查看结果。如果缺少节点4作为键,则graphviz_layout代码出了问题。 - Aric
我遇到了同样的问题,我已经打印了 pos 字典,并且节点也在那里,但是当绘制数据时,它仍然提示 NetworkXError: 节点 4 没有位置。 - kuafu
显示剩余3条评论
1个回答

2
由于两个原因,导致出现了这个错误:1)graphviz的安装不正确,重新从头安装可以解决这个问题。另外,第二个原因是这行代码:
       pos=nx.graphviz_layout(G,prog='dot') 

必须始终放置(并重复)在绘制图形之前,以考虑新节点/边。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接