Я работаю с обычной сетью (сеткой), которую я создаю как:
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
, я правильно получаю первые графики, но последующие графики пусты, поскольку график никогда не восстанавливается до своего неизменного состояния; - Если исходная сетка создается внутри цикла
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
приводят к построению неизменного графика для каждой итерации. Интересно, проблема в том, как я вызываю эту функцию, поскольку она всегда строит график без сбойных узлов. Почему у меня возникают проблемы с графикой?.
tmp_G = org_G.copy()
. Кроме того, я не вижу разницы в вашем коде между ситуацией 1 и ситуацией 2. - person Abdallah Sobehy   schedule 10.11.2015csv
файлов один за другим без обновления графа, что приводит к полному отказу сети после второй итерации. На этапе 2 график обновляется на каждой итерации, но он строится так, как будто сбоев не было (но сбои случаются). - person FaCoffee   schedule 10.11.2015tmp_G = org_G.copy()
возвращаетNameError: name 'org_G' is not defined
. - person FaCoffee   schedule 10.11.2015tmp_G = G.copy()
А затем применить изменения удаления узлов к tmp_G, а также построить его, чтобы увидеть изменения, и если вы хотите сравнить его с исходным использованием G - person Abdallah Sobehy   schedule 10.11.2015with_labels=False
не является существенным для того, что вы наблюдаете, это просто шум. Актуально лиdpi=1000, node_size=10, bbox=tight
? Если вы не знаете, вы недостаточно отладили, чтобы попросить нас потратить на это время. Если они не актуальны, удалите их. - person Joel   schedule 11.11.2015nx.draw_network(G)
, и эта строка по-прежнему относилась к оригинальной, неизмененнойG
, а не к измененным версиям, которые я намеревался изобразить. Я надеюсь, что сделал вещи более ясными. - person FaCoffee   schedule 11.11.2015