显示在MultiGraph中取得的优势

时间:2018-10-08 15:42:13

标签: python networkx

我想看看最短路径上的边缘是什么,所以我知道它是穿过蓝线还是红线。以下是我大规模实施的示例。我知道它会在这里穿过“红色”线,但是我想在执行nx.shortest_path时看到它。

有看到吗?打击是我的代码

import networkx as nx
import matplotlib.pyplot as plt

G=nx.MultiGraph()
G.add_node("A")
G.add_node("B")
G.add_edge("A","B",weight=10,wire='Red')
G.add_edge("A","B",weight=12,wire='Blue')
G.add_edge("C","B",weight=3)

pos = nx.spring_layout(G)
nx.draw(G, pos)

plt.show()

nx.shortest_path(G,'A','C')

理想情况下,我希望此比例缩放。现在,我有一个实现与具有相同基础图的加权图进行比较,但是所有节点之间只有一条边。我在一条边上交换权重,然后输出在原始图和新图之间更改的所有路径。

我希望能够在节点之间添加多个边,更改权重,并查看从节点B-> C是否使用了蓝线或红线。

1 个答案:

答案 0 :(得分:0)

我喜欢这样

h = G.subgraph(nx.shortest_path(G,'A','C'))
h.edges(data=True)
[('B', 'C', {'weight': 3}),
 ('B', 'A', {'weight': 10, 'wire': 'Red'}),
 ('B', 'A', {'weight': 12, 'wire': 'Blue'})]

edge_color = nx.get_node_attributes(h,'wire') 
nx.draw_networkx(h, edge_color=[d['wire'] for _,_, d in h.edges(data=True)])
plt.show()

enter image description here

我得到“蓝色”,但我想是这样,因为“蓝色”是第二个,“在红色之上”。如果您先添加蓝色,则会得到红色