繁体   English   中英

为NetworkX中的特定边缘着色

[英]Coloring specific edges in NetworkX

我正在NetworkX Watts-Strogatz随机生成的图形上运行Dikjstra的最短路径算法,并且我想在绘制图形之前先对所发现的路径的边缘进行着色,使其与其余的边缘有所不同。

我的Dijkstra的算法返回路径中的节点列表,如下所示:

dijkstra(graph, '5', '67')
['67', '62', '59', '56', '3', '99', '5']

我将如何更改这些节点之间的边缘颜色,使其变为蓝色而不是红色?

请注意,该图是随机生成的,因此路径每次都会更改,但是它将始终将路径中的节点输出为列表。

我最初尝试了以下方法:

    for i in range(path.__len__()):
        if i != path.__len__()-1:
            wsGraph.add_edge(path[i], path[i]+1, color='b')

但这并没有修改边缘,而是添加了看起来像新节点的东西。

我找到了这个问题, python networkx-通过为图形绘制着色来标记边缘 ,这回答了我的问题。 我只需要对其进行如下修改:

for e in wsGraph.edges():
    wsGraph[e[0]][e[1]]['color'] = 'grey'
# Set color of edges of the shortest path to green
for i in range(len(path)-1):
    wsGraph[int(path[i])][int(path[i+1])]['color'] = 'red'
# Store in a list to use for drawing
edge_color_list = [wsGraph[e[0]][e[1]]['color'] for e in wsGraph.edges() ]
nx.draw(wsGraph, node_color='blue', edge_color = edge_color_list,   with_labels = True)
plt.show()

我只需要将路径转换为整数而不是字符即可。 我还更改了节点和非路径边缘的颜色以使其更加清晰。

结果图片:

使用我自己的Dijkstra算法,在随机生成的25个节点的Watts-Strogatz图中5至13之间的最短路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM