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
參數完全避免noCor
,該參數指定要繪製哪些節點。
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)
你可能會問,爲什麼我對於定義pos
到g
而非h
。這是因爲也許你想在g
中將其他節點畫成稍後或其他圖形,這對於保持一致的位置很有用。如果你只是按照h
這樣做,它基本上會創建一條直線。
對您的命令nx.draw_networkx_nodes(g, pos=pos, node_color=noCor)
有些評論。這告訴它使用來自noCor
的顏色繪製g
中的所有節點[並且將根據顏色在noCor
中出現的順序以及節點在g.nodes()
中出現的順序]將節點着色。最後,請注意,您需要使用matplotlib將識別的顏色(請參閱http://matplotlib.org/api/colors_api.html)。在這種情況下:
noCor = ["b" if n in A else "r" for n in g.nodes()]
對不起,但它只能畫出A中的節點和邊(在這種情況下是最短路徑)?!因爲使用我的代碼,我得到所有節點(藍色爲最短路徑,紅色爲同一圖像中的其他節點),但我只想繪製圖像中的藍色節點。謝謝:) – MattGA
好吧 - 你的代碼看起來像你試圖用不同的顏色繪製節點。我修改了它。 – Joel
哇,謝謝!它真的工作! – MattGA