簡體   English   中英

僅繪制Djikstra的節點和Edges Networkx

[英]Drawing only Djikstra's Nodes and Edges Networkx

我使用Networkx在Python中計算Djisktra的最短路徑時遇到了問題。 我試圖只繪制Djikstra方法返回的最短路徑,因為有很多節點和邊緣要繪制。

我已經有了:

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

它運作良好。 之后我有:

noCor = ["blue" if n in A else "red" for n in g.nodes()]
pos = nx.spring_layout(g)
nx.draw_networkx_nodes(g, pos=pos, node_color=noCor)
nx.draw_networkx_edges(g, pos=pos)
fig = plt.axis('off')
fig = plt.gcf()
fig.set_size_inches(52.08,52.08)
fig.savefig("Djikstra.png",dpi=96)

但它會保存所有圖形。 有誰可以幫助我嗎?

非常感謝!

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的節點和路徑中的邊。 實際上,你可以避開noCor完全使用nodelist arguement指定哪個節點繪制。

nx.draw_networkx_nodes(g,pos=pos, nodelist = A, node_color = 'b')

要僅繪制與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)

你可能會問為什么我定義了關於g而不是h pos 這是因為你可能想要稍后將g其他節點繪制到你的圖中或其他圖中,然后有一致的位置是有用的。 如果你只是關於h ,它基本上想要創建一條直線。


你的命令nx.draw_networkx_nodes(g, pos=pos, node_color=noCor)一些評論nx.draw_networkx_nodes(g, pos=pos, node_color=noCor) 這告訴它用noCor的顏色繪制g所有節點[並且它將根據顏色在noCor出現的順序以及節點在g.nodes()出現的順序為節點g.nodes() 最后,請注意您需要使用matplotlib將識別的顏色(請參閱http://matplotlib.org/api/colors_api.html )。 在這種情況下:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM