在Networkx图中突出显示最短路径

10

我有一个人际关系网络,可以使用Networkx创建有向图来显示它们之间的联系。

以下是代码示例:

edges = edglist
nodes = nodelist
dg.add_weighted_edges_from(edges)
#print dg.nodes()
print nx.shortest_path(dg, source='Freda', target='Levi', weight=None)
nx.draw(dg)
plt.savefig("path.png")

这将产生: 连接图

我也可以计算两个节点之间的最短路径。但是,我困在如何突出显示这个“最短路径”的问题上。任何指针都将不胜感激。顺便说一下,我是一个新手

2个回答

28
import matplotlib.pyplot as plt
G = nx.karate_club_graph()
pos = nx.spring_layout(G)
nx.draw(G,pos,node_color='k')
# draw path in red
path = nx.shortest_path(G,source=14,target=16)
path_edges = list(zip(path,path[1:]))
nx.draw_networkx_nodes(G,pos,nodelist=path,node_color='r')
nx.draw_networkx_edges(G,pos,edgelist=path_edges,edge_color='r',width=10)
plt.axis('equal')
plt.show()

输入图像描述


嗯,基本上是先画出原始图形,然后在其之上绘制最短路径吗?所以红点实际上是放在黑点的上面?另外,我的图是有向的,能用箭头表示方向吗? - timebandit
是的,那就是这个概念。您可以通过跳过nx.draw()调用并明确指定要绘制哪些节点和边来避免节点和边的“双重”绘制。不幸的是,NetworkX+Matplotlib无法绘制箭头。 - Aric
@Aric,你能告诉我如何显示最短路径的标签吗? - Engr Umair

3

在您的zip()之后,您应该添加一个set() path_edges = set(path_edges)来使最短路径颜色化工作。


1
实际上,OP的代码中没有任何zip。如果你想在Aric的答案中添加信息,请考虑将你的答案转换为评论。 - aBnormaLz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接