Python 3.x 根据Dijkstras算法访问的边,更改NetworkX图形中的边颜色

Python 3.x 根据Dijkstras算法访问的边,更改NetworkX图形中的边颜色,python-3.x,networkx,Python 3.x,Networkx,我试图更改python包NetworkX中dijkstras算法访问的节点之间的边的颜色。本项目中使用的图形是内置的nx.karate_club_graph() 如果我有代码的话,预期的结果是访问节点之间的边的颜色将是红色。当前结果是高亮显示所有已访问的节点,但边缘为默认的黑色 我已经从stack overflow中了解了关于更改边缘颜色的不同解决方案,但我无法让它们适用于我的特定场景 这是我编写的代码 将networkx导入为nx 将matplotlib.pyplot作为plt导入 G=nx.

我试图更改python包NetworkX中dijkstras算法访问的节点之间的边的颜色。本项目中使用的图形是内置的nx.karate_club_graph()

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

我已经从stack overflow中了解了关于更改边缘颜色的不同解决方案,但我无法让它们适用于我的特定场景

这是我编写的代码

将networkx导入为nx
将matplotlib.pyplot作为plt导入
G=nx.空手道俱乐部图()
nodes=G.nodes()
位置=nx.弹簧布局(G)
颜色={“你好先生”:“3DA3F5”,“军官”:“E0D91B”}
dijkstra_路径=nx.dijkstra_路径(G,24,16)
颜色=[“红色”,如果dijkstra_路线中有n个,则为其他颜色[G.nodes[n][“club”]]表示节点中有n个]
nx.draw(G,位置,节点颜色=颜色,带标签=真)

尝试将
edge\u color
添加到
nx.draw()

虽然我不明白为什么edge
(31,0)
不是彩色的,但显示的内容与您想要的内容非常接近

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()