def main3():
# 建立带权图
G = nx.Graph()
# 向图中添加边,每条边都有一个权值
G.add_edge('A', 'B', weight=5)
G.add_edge('A', 'C', weight=3)
G.add_edge('A', 'D', weight=2)
G.add_edge('B', 'C', weight=1)
G.add_edge('B', 'D', weight=2)
G.add_edge('C', 'D', weight=4)
# 查找从点 A 到点 B 的所有路径
source=nameEntry3.get()
target=nameEntry4.get()
all_paths = nx.all_simple_paths(G,source, target)
# 记录路径与权重和
all_paths_with_weight = {}
for path in all_paths:
weight_sum = 0
for i in range(len(path)-1):
source = path[i]
target = path[i+1]
weight = G.get_edge_data(source, target)['weight']
weight_sum += weight
all_paths_with_weight[str(path)] = weight_sum
# 排序
return sorted(all_paths_with_weight.items(),key = lambda x:x[1],reverse = False)
fig = plt.figure(figsize=(5, 5))
canvas = FigureCanvasTkAgg(fig, master=window5)
canvas.get_tk_widget().grid(row=8, column=11)
# 在 Tkinter 用户界面中绘制图
ax = fig.add_subplot(111)
pos = {'A': (0, 2), 'B': (1, 2), 'C': (0, 1), 'D': (1, 1), 'E': (0, 0), 'F': (1, 0),'G':(2,0),'K':(3,0)} # 使用 FR 算法排列节点
# 使用 NetworkX 绘制无向图
nx.draw(G,pos=pos,ax=ax, with_labels=True)
# 遍历路径上的所有点,在图上标注路径
# 绘制图像
edgeList = []
for i in range(len(all_paths)-1):
edgeList.append((all_paths[i], all_paths[i+1]))
nx.draw_networkx_edges(G, pos, edgelist=edgeList, edge_color='m', width=4,ax=ax)
plt.show()
如何标注两点间的所有路径,我的代码好像无法标注多条路径
nx.draw_networkx_edges
你需要检查一下nx里面关于绘画的模块是怎么定义的
另外你既然已经加载了plt库,建议直接使用plt绘制