簡體   English   中英

NetworkX:在 for 循環中繪制圖形會返回錯誤的圖形

[英]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 1stage 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的圖形。 我想知道問題是否出在我調用該函數的方式上,因為它總是繪制沒有失敗節點的圖形。 為什么我有這個繪圖問題? .

  • 在 for 循環之外創建圖形塊。
  • 在 for 循環內使用tmp_G = G.copy()創建圖形的副本
  • 使用draw_netwokxremove_nodes_from使用tmp_G而不是G
  • 當您想將更改后的圖形與原始圖形進行比較時,請使用圖形G調用 draw_networkx 函數

暫無
暫無

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

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