无法查看NetworkX中的节点列表
我还是个新手,正在尝试使用Networkx这个库。不过,我发现它的文档对我这样的初学者来说不太友好。
我手动创建了一个节点列表和一个边列表来构建图形,绘制出来也没问题。但是我遇到了一些问题:
- 当我用
print G.nodes()
打印节点时,可以看到节点的列表,但用print G.edges()
打印边时却什么都没有。 - 当我运行
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
这个函数,但在你像上面那样添加了边之后,就不需要这样做了。