NetworkX 中的图例 python 基于边缘颜色

Legend in NetworkX python based on edge color

由于我是 python 和 networkX 的新手,因此我在添加基于边缘颜色的图例时遇到了麻烦。 我有一个 excel sheet 为模型提供边缘属性之一的颜色,指示边缘的颜色(如果是卡车则为黄色,轮船为蓝色等)。但是,我的代码没有正确执行图例逻辑。图例显示为另一幅图。

我尝试使用 nx.draw_networkx_edges 但我无法弄明白。

这是代码:

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'])
plt.show()

plt.plot(edgelist["Color"], "Yellow", label="Truck")
plt.plot(edgelist["Color"], "Green", label="Train")
plt.plot(edgelist["Color"], "Blue", label="Ship")
plt.legend()

您可以创建 custom legend via dummy Line2D 个对象。

为了让黄色更显眼,您可以将其替换为'Gold':

edge_colors = ['Gold' if c == 'Yellow' else c for c in edge_colors]

要添加自定义图例,在 ax.set_yticklabels(['DB','AD','AA']) 之后的代码中,您可以将剩余的代码替换为:

from matplotlib.lines import Line2D

handles = [Line2D([], [], color=color, label=label)
           for color, label in zip(["Gold", "Green", "Blue"], ["Truck", "Train", "Ship"])]
ax.legend(handles=handles)
plt.show()