【问题标题】:Coloring specific edges in NetworkX在 NetworkX 中为特定边缘着色
【发布时间】:2016-06-01 07:24:52
【问题描述】:

我正在 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 algorithm networkx graph-theory dijkstra


【解决方案1】:

我发现了这个问题, python networkx - mark edges by coloring for graph drawing,这回答了我的问题。我只需要稍微修改如下:

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

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

结果图片:

【讨论】:

    猜你喜欢
    • 2014-05-22
    • 2013-07-12
    • 2020-09-26
    • 2021-04-01
    • 2020-12-18
    • 2012-11-28
    • 1970-01-01
    • 2020-06-24
    • 2020-10-17
    相关资源
    最近更新 更多