You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python NetworkX基于边颜色添加图例显示异常问题求解

问题解决说明

你代码的核心问题有两个:

  • plt.show()执行顺序错误:该方法运行后会直接关闭当前活跃画布,你把它写在图例生成代码之前,后续的绘图指令会自动创建新的空白画布,自然会出现图例和网络图分离的情况
  • 图例生成逻辑错误:直接调用plt.plot无法关联NetworkX绘制的边属性,需要创建自定义哑元图例项来匹配边颜色和运输类型的对应关系

修正后完整代码

import matplotlib.pyplot as plt
import networkx as nx
from matplotlib.lines import Line2D # 导入创建哑元图例的工具类

fig, ax = plt.subplots(figsize=(10, 5))
plt.title('Transportation Network', size=15)
#nx.draw_networkx_labels(GR, pos_dict)
nx.draw(g, pos=node_positions, edge_color=edge_colors, node_size=40, node_color='black', ax=ax)

plt.xlabel('Time ( 1 epoch= 15 mins)')
plt.ylabel("Cities")
ax.set_axis_on()
ax.tick_params(left=True, bottom=True, labelleft=True, labelbottom=True )
plt.locator_params(axis="y", nbins=3)
plt.locator_params(axis="x", nbins=30)
ax.set_yticks([10,20,30])
ax.set_yticklabels(['DB','AD','AA'])

# 按你定义的颜色-运输类型对应关系生成图例项
legend_elements = [
    Line2D([0], [0], color='yellow', lw=2, label='Truck'),
    Line2D([0], [0], color='green', lw=2, label='Train'),
    Line2D([0], [0], color='blue', lw=2, label='Ship')
]
# 将图例添加到当前网络图画布,loc参数可自定义调整图例显示位置
ax.legend(handles=legend_elements, loc='upper right')

plt.show()

如果你的边颜色和运输类型的对应关系是动态从edgelist中读取的,也可以遍历edgelist的Color字段去重后自动生成legend_elements,不需要硬编码写死。

内容的提问来源于stack exchange,提问作者Romio Rodriguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:06:06