微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据 Dijkstras 算法访问的边更改 NetworkX Graph 中的边颜色

如何解决根据 Dijkstras 算法访问的边更改 NetworkX Graph 中的边颜色

我正在尝试更改由 python 包 NetworkX 中的 dijkstras 算法访问的节点之间的边的颜色。这个项目中使用的grap是内置的nx.karate_club_graph()

如果我有它的代码,预期的结果是被访问节点之间的边的颜色将是红色。当前结果是所有访问过的节点都高亮显示,但边缘是认的黑色。

我从堆栈溢出中查看了有关更改边缘颜色的不同解决方案,但我无法让它们适用于我的特定场景。

这是我制作的代码

import networkx as nx
import matplotlib.pyplot as plt
G = nx.karate_club_graph()

nodes = G.nodes()

position = nx.spring_layout(G)
color = {"Mr. Hi": "#3DA3F5","Officer": "#E0D91B"}
dijkstra_route = nx.dijkstra_path(G,24,16)
colors = ["red" if n in dijkstra_route else color[G.nodes[n]["club"]] for n in nodes] 
nx.draw(G,position,node_color = colors,with_labels = True)

解决方法

尝试将 edge_color 添加到 nx.draw()

import networkx as nx
import matplotlib.pyplot as plt

G = nx.karate_club_graph()

nodes = G.nodes()

position = nx.spring_layout(G)
color = {"Mr. Hi": "#3DA3F5","Officer": "#E0D91B"}
dijkstra_route = nx.dijkstra_path(G,24,16)

colors = ["red" if n in dijkstra_route else color[G.nodes[n]["club"]] for n in nodes]

dijkstra_edges = []
for index in range(0,len(dijkstra_route) - 1):
   edge = (dijkstra_route[index],dijkstra_route[index + 1])
   dijkstra_edges.append(edge)

edge_colors = ["red" if edge in dijkstra_edges else "black" for edge in G.edges()]


nx.draw(G,position,node_color=colors,edge_color=edge_colors,with_labels=True)
plt.show()

显示this,这与您想要的很接近,尽管我不明白为什么边缘(31,0) 没有着色

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。