无法查看NetworkX中的节点列表

0 投票
1 回答
761 浏览
提问于 2025-04-18 09:35

我还是个新手,正在尝试使用Networkx这个库。不过,我发现它的文档对我这样的初学者来说不太友好。

我手动创建了一个节点列表和一个边列表来构建图形,绘制出来也没问题。但是我遇到了一些问题:

  1. 当我用 print G.nodes() 打印节点时,可以看到节点的列表,但用 print G.edges() 打印边时却什么都没有。
  2. 当我运行 path = nx.shortest_path(G, source='Debra', target='John') 时,出现了错误。

networkx.exception.NetworkXNoPath: Debra和John之间没有路径。

这是我的示例代码:

G = nx.DiGraph()        
edges = [
('Freda', 'Olive', 0), ('Freda', 'John', 0), ('Freda', 'Debra', 0), ('Ollie', 'Mercedes', 0), 
('Ollie', 'Freda', 0), ('Ollie', 'Bryant', 0), ('Debra', 'Walter', 0), ('Debra', 'Levi', 0), 
('Debra', 'Jennie', 0), ('Debra', 'Robin', 0), ('Olive', 'John', 0), ('Olive', 'Ollie', 0), 
('Levi', 'Ollie', 0), ('Levi', 'John', 0), ('Levi', 'Walter', 0), ('Jennie', 'Levi', 0), 
('Jennie', 'John', 0), ('Jennie', 'Freda', 0), ('Jennie', 'Robin', 0), ('Mercedes', 'Walter', 0),
('Mercedes', 'Robin', 0), ('Mercedes', 'Bryant', 0), ('John', 'Bryant', 0), ('John', 'Debra', 0), 
('John', 'Walter', 0), ('Robin', 'Ollie', 0), ('Bryant', 'Olive', 0), ('Bryant', 'Ollie', 0), 
('Bryant', 'Freda', 0), ('Bryant', 'Mercedes', 0), ('Walter', 'John', 0), ('Walter', 'Levi', 0), 
('Walter', 'Bryant', 0)]

nodes = ['Freda', 'Ollie', 'Debra', 'Mercedes', 'Levi', 'Jennie', 'Olive', 'John', 'Robin', 'Bryant', 'Walter']

G.add_nodes_from(nodes)
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos,nodelist=nodes,node_color='k',alpha=0.1)
nx.draw_networkx_labels(G,pos)

nx.draw_networkx_edges(G,pos,edgelist=edges,edge_color='k',width=1, alpha=0.2)
print G.nodes()
print G.edges()    
path = nx.shortest_path(G, source='Debra', target='John')

任何反馈都非常感谢。

1 个回答

4

看起来你没有把边加到你的NetworkX图里。试着在添加节点后(或者替代添加节点时)加上这一行:

G.add_edges_from(edges)

你之所以在绘图时能看到边,是因为你把边明确地传给了nx.draw_networkx_edges这个函数,但在你像上面那样添加了边之后,就不需要这样做了。

撰写回答