Я работаю с регулярной сетью (сетки), которые я создаю, как:NetworkX: построение графика в циклю возвращает неправильный график
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
У меня есть два способа итерации коды. В обоих случаях я удаляю узлы из сети и пытаюсь их нарисовать. В зависимости от того, создаю ли я сеть вначале или внутри цикла, я получаю другое поведение, когда я его создаю.
Моя проблема: Я хочу, чтобы построить сетку после этапа 1 и после 2-й ступени, поэтому для сравнения с неизмененной сетки/графика. Я не в состоянии сделать это правильно, потому что:
- Если исходная сетка создается вне
for
петли, я правильно получить первые участки, но позже участки пусты, как граф никогда не восстанавливается обратно в неизмененном STATU; - Если исходная сетка создана внутри цикл
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
результат в неизмененном графа быть построены для каждой итерации. Интересно, проблема в том, как я называю эту функцию, поскольку она всегда отображает график без неудачных узлов. Почему у меня проблема с этим рисунком?.
Я не уверен, что я полностью понимаю, но если ваша проблема в том, что первоначальный график изменяется, то почему бы не просто создать копию, когда enteri каждый цикл, чтобы исходный график не изменялся с помощью 'tmp_G = org_G.copy()'.Кроме того, я не вижу разницы в вашем коде между ** ситуацией 1 ** и ** ситуацией 2 ** –
Разница между сидением 1 и 2 заключается в том, что в сите 1 график создается за пределами цикла, а в сите 2 он создается внутри. В первом случае я получаю ситуацию, когда график берется неповрежденным и применяет файлы 'csv' один за другим, не обновляя граф, что приводит к полному сбою сети после второй итерации. В сите 2 график обновляется на каждой итерации, но он отображается так, как если бы не произошел сбой (но происходит сбой). – FaCoffee
Проблема заключается в том, что при каждой итерации график должен быть нанесен после этапа 1 и этапа 2. С новой итерацией график должен войти в цикл без изменений, чтобы я мог оценить, что происходит на этапах отказа. 'Tmp_G = org_G.copy()' возвращает 'NameError: name 'org_G' не определен'. – FaCoffee