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
相关产品推荐
相关产品推荐

