如何利用点索引列表绘制经过所有点的闭合路线?
旅行商问题闭合路线绘制方案
你只需根据指定的final_route序列,提取对应点的坐标并绘制连续线段,就能得到闭合路线。以下是修改后的完整代码:
import matplotlib.pyplot as plt # 客户点数据 allIds = [0, 1, 2, 3, 4, 5] allxs = [50, 25, 43, 80, 25, 18] allys = [50, 54, 96, 50, 90, 47] final_route = [0, 4, 5, 2, 1, 3, 0] # 从路线ID中提取对应坐标 route_x = [allxs[pid] for pid in final_route] route_y = [allys[pid] for pid in final_route] # 初始化绘图 fig, ax = plt.subplots() fig.set_size_inches(6, 6) # 绘制闭合路线线段 ax.plot(route_x, route_y, color='#2e86ab', linewidth=2) # 绘制客户点并标注ID ax.plot(allxs, allys, ls="", marker="o", markersize=8, color='#e74c3c') for xi, yi, pidi in zip(allxs, allys, allIds): # 标注偏移一点,避免覆盖点 ax.annotate(str(pidi), xy=(xi, yi), xytext=(3, 3), textcoords='offset points') # 设置坐标轴范围 plt.xlim([0, 100]) plt.ylim([0, 100]) plt.show()
关键说明:
- 用列表推导式根据
final_route中的ID,从allxs和allys中取出对应坐标,生成路线的x、y序列 - 调用
ax.plot(route_x, route_y)时,matplotlib会自动按顺序连接所有点,由于final_route最后回到起点ID=0,所以会形成闭合路线 - 调整了点和路线的颜色,同时给标注加了小偏移,让内容更清晰
内容的提问来源于stack exchange,提问作者Yannis_Tr
相关产品推荐
相关产品推荐

