[英]NetworkX: plotting a graph in a for loop returns the wrong graph
我正在使用我創建的常規網絡(網格):
import networkx as nx
N=100
def graph_creating(N):
G=nx.grid_2d_graph(N,N)
pos = dict( (n, n) for n in G.nodes() ) #Dictionary of all positions
return G, pos
我有兩種迭代代碼的方法。 在兩者中,我從網絡中刪除節點並嘗試繪制它。 根據我是最初創建網絡還是在循環內創建網絡,我在繪制它時會得到不同的行為。
我的問題:我想在 stage 1和stage 2之后繪制網格,以便與未更改的網格/圖形進行比較。 我沒有正確地做到這一點,因為:
for
循環之外創建的,我會正確地得到第一個圖,但后來的圖是空的,因為圖永遠不會恢復到其未更改的狀態;for
循環內創建的,我總是最終繪制未更改的網格,就好像刪除對其沒有影響一樣。為了能夠在第 1 階段和第 2 階段之后立即繪制圖形,還應該將圖形創建塊放置在哪里?
版本 1圖形是在for
循環之外創建的:
G, pos = graph_creating(N)
nodelist = G.nodes()
for counter in range(5):
G1 = nodelist[2*counter:2*counter+1]
G.remove_nodes_from(G1)
nx.draw_networkx(G, pos = pos)
figurename = 'file{0}.png'.format(counter)
plt.savefig(figurename)
G2=nodelist[2*counter+1:2*counter+2]
G.remove_nodes_from(G2)
nx.draw_networkx(G,pos=pos)
#it's not clear from your original question if you save this figure or not
結果:只有第一次迭代產生正確的圖。 后面的圖是空的,因為圖永遠不會恢復到其未更改的狀態。
版本 2圖形是在for
循環內創建的:
for counter in range(5):
G, pos = graph_creating(N)
nodelist = G.nodes()
G1 = nodelist[2*counter:2*counter+1]
G.remove_nodes_from(G1)
nx.draw_networkx(G, pos = pos)
figurename = 'file{0}.png'.format(counter)
plt.savefig(figurename)
G2=nodelist[2*counter+1:2*counter+2]
G.remove_nodes_from(G2)
nx.draw_networkx(G,pos=pos)
#it's not clear from your original question if you save this figure or not
結果:對nx.draw_networkx
的調用導致每次迭代都繪制未nx.draw_networkx
的圖形。 我想知道問題是否出在我調用該函數的方式上,因為它總是繪制沒有失敗節點的圖形。 為什么我有這個繪圖問題? .
tmp_G = G.copy()
創建圖形的副本draw_netwokx
或remove_nodes_from
使用tmp_G而不是G
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.