networkx生成图时出现的错误

source = [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,3,4,5]
target = [2,3,4,5,6,7,8,9,2,3,4,5,6,7,8,9,6,7,8,9]

G = nx.DiGraph(zip(source,target))
# G.add_nodes_from(range(0,9))
# G.add_edges_from(zip(source,target))
print(nx.adjacency_matrix(G))
print(nx.to_numpy_matrix(G))
ps = nx.shell_layout(G)
nx.draw(G,ps,with_labels=True,node_size=30)
plt.show()

有时我为了图方便直接用边的方式来生成图,而不是先添加节点,再加边,偶然测试间发现了问题,上面是代码,下面是结果,结果与想象中不同,通过边来添加节点,会按照节点加入的时间来给节点编号,首先加入图的节点时逻辑上的0和2号节点,但是2号节点是第二个加入的节点所以它在图中的编号为1,之后又加入3,4,5,6,7,8,9节点,他们在图中的编号为,2,3,4,5,6,7,8,而二号节点是最后加入的节点,所有在图中的编号为9

 

 

正确的方法:

source = [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,3,4,5]
target = [2,3,4,5,6,7,8,9,2,3,4,5,6,7,8,9,6,7,8,9]

G = nx.DiGraph()
G.add_nodes_from(range(0,9))
G.add_edges_from(zip(source,target))
print(nx.adjacency_matrix(G))
print(nx.to_numpy_matrix(G))
ps = nx.shell_layout(G)
nx.draw(G,ps,with_labels=True,node_size=30)
plt.show()

 

 而生成的图相同,这就导致我们发现不了问题

 

posted @ 2023-09-13 10:43  skipone  阅读(112)  评论(0)    收藏  举报