只绘制Djikstra的节点和边缘网络X

2024-10-03 00:18:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用Networkx计算Python中Djisktra的最短路径时遇到了一个问题。我试着只画Djikstra方法返回的最短路径,因为有太多的节点和边要绘制。在

我已经有:

A = nx.dijkstra_path(g,'source','target')

效果很好。之后我有:

^{pr2}$

但它会保存所有图形。有人能帮帮我吗?在

非常感谢!在


Tags: path方法路径networkx图形sourcetarget节点
1条回答
网友
1楼 · 发布于 2024-10-03 00:18:37

TL/DR:只要这样做:

pos = nx.spring_layout(g)
h = g.subgraph(A)
nx.draw_networkx_nodes(h,pos=pos, node_color='b') #or even nx.draw(h,pos=pos,node_color='b') to get nodes and edges in one command
nx.draw_networkx_edges(h,pos=pos)

完整答案:

您只需要绘制A中的节点和路径中的边。实际上,可以使用指定绘制哪些节点的nodelist参数来完全避免{}。在

^{pr2}$

要只绘制与A对应的边,您需要弄清楚它们是什么。我知道的最简单的方法是

h = g.subgraph(A)

那么h是在节点A上归纳的子图。它的所有边都在A。我有99.9%的把握(但还没有通过正式的证明)如果A是两个节点之间的最短路径(由Dijkstra返回),那么除了路径中的边之外,A中的节点之间没有任何其他边。因此h.edges()将给出A的边。在

nx.draw_networkx_edges(g,pos=pos, edgelist = h.edges())

一个更紧凑的形式可以做到:

pos = nx.spring_layout(g)
h = g.subgraph(A)
nx.draw_networkx_nodes(h,pos=pos, node_color='b') #or even nx.draw(h,pos=pos,node_color='b') to get nodes and edges in one command
nx.draw_networkx_edges(h,pos=pos)

您可能会问,为什么我将pos定义为g,而不是{}。这是因为也许你想在以后把g中的其他节点绘制到你的图形或其他图形中,因此保持一致的位置是很有用的。如果你只对h做这个操作,它基本上会想创建一条直线。在


对您的命令nx.draw_networkx_nodes(g, pos=pos, node_color=noCor)的一些注释。这告诉它用noCor中的颜色绘制g中的所有节点,它将根据颜色在noCor中出现的顺序和节点在{}中出现的顺序对节点进行着色。最后,请注意,您需要使用matplotlib能够识别的颜色(请参见http://matplotlib.org/api/colors_api.html)。在这种情况下:

noCor = ["b" if n in A else "r" for n in g.nodes()]

相关问题 更多 >