networkx.exception.NetworkXError: Node 64 has no position

networkx.exception.NetworkXError: Node 64 has no position

我在标题中遇到错误,已经有一些类似的问题,但 none 的主题似乎对我有用。这是我在 python:

中的代码
G = nx.Graph()
def addnodeoNx():
    for k in randomGraph:
        for j in randomGraph[k]:
            G.add_node(j)
            G.add_edges_from([(k, j)])
addnodeoNx()
print(G)

subax1 = plt.subplot(121)
nx.draw(G, with_labels=True, font_weight='bold')
subax2 = plt.subplot(122)
nx.draw_shell(G, nlist=[range(5, 10), range(5)], with_labels=True, font_weight='bold')

基本上,我试图在 NetworkX 中绘制一个随机图,在上面的代码中 randomGraph 是一个字典,键是所有边,值是每个边连接到的边数组,但是当我尝试 运行 代码时,它给了我以下错误:

File "c:\Users\besan\OneDrive\Desktop\LAM\testall.py", line 124, in <module>
    nx.draw_shell(G, nlist=[range(5, 10), range(5)], with_labels=True, font_weight='bold')
  File "C:\Users\besan\AppData\Local\Programs\Python\Python39\lib\site-packages\networkx\drawing\nx_pylab.py", line 1267, in draw_shell
    draw(G, shell_layout(G, nlist=nlist), **kwargs)
  File "C:\Users\besan\AppData\Local\Programs\Python\Python39\lib\site-packages\networkx\drawing\nx_pylab.py", line 121, in draw
    draw_networkx(G, pos=pos, ax=ax, **kwds)
  File "C:\Users\besan\AppData\Local\Programs\Python\Python39\lib\site-packages\networkx\drawing\nx_pylab.py", line 333, in draw_networkx
    draw_networkx_nodes(G, pos, **node_kwds)
  File "C:\Users\besan\AppData\Local\Programs\Python\Python39\lib\site-packages\networkx\drawing\nx_pylab.py", line 456, in draw_networkx_nodes
    raise nx.NetworkXError(f"Node {e} has no position.") from e
networkx.exception.NetworkXError: Node 19 has no position.

nlist 告诉 draw_shell 将哪些节点放入内部 shell 和外部 shell。 draw_shell 的源代码是 here.

然后 draw_shell 使用 pos=shell_layout(G, nlist=nlist) 从节点创建位置。然后用 nx.draw(G,pos).

绘制

如果节点的位置尚未定义,函数 nx.draw 无法处理绘图。

在您的例子中,您已将节点 5 到 9 放入一个 shell 中,将 0 到 4 放入另一个中。但是9以上的任何节点都没有位置。


评论

将参数传递给从某处复制的函数时,应始终小心。参数的值可能很重要,否则它只会使用默认值。