2015-11-20 2 views
2

Я работаю с обычной сетью узлов 100x100=10000. Сеть создается так же, как это:Networkx: Как изменить индексирование узлов

import networkx as nx 
import matplotlib.pyplot as plt 
N=100 
G=nx.grid_2d_graph(N,N) #2D regular graph of 10000 nodes 
pos = dict((n, n) for n in G.nodes()) #Dict of positions 
labels = dict(((i, j), i + (N-1-j) * N) for i, j in G.nodes()) 
nx.relabel_nodes(G,labels,False) 
pos = {y:x for x,y in labels.iteritems()} #An attempt to change node indexing 

Я хочу иметь node 0 в верхнем левом углу, и узел 9999 в нижнем правом углу. Вот почему вы видите второй вызов pos: это попытка изменить индексирование узлов в соответствии с моей волей.

Однако, я заметил, что после того, как я запускаю скрипт: pos[0]=(0,99), pos[99]=(99,99), pos[9900]=(0,0), pos[9999]=(99,0). Это означает, что networkx видит начало сетки в левом нижнем углу и что самое дальнее положение от начала координат, (99,99), относится к 99-му узлу.

Теперь я хочу изменить это, чтобы иметь начало в левом верхнем углу. Это означает, что я хочу иметь: pos[0]=(0,0), pos[99]=(0,99), pos[9900]=(99,0), pos[9999]=(99,99).

Что следует изменить в pos?

ответ

1

Я предполагаю, что вы следуете примеру здесь: Remove rotation effect when drawing a square grid of MxM nodes in networkx using grid_2d_graph

С этим сказанным, ваша картина будет выглядеть, как у них, если вы делаете это так же, как они это делали. Если вы просто хотите, чтобы «pos» выглядел иначе, вы можете использовать:

inds = labels.keys() 
vals = labels.values() 
inds.sort() 
vals.sort() 
pos2 = dict(zip(vals,inds)) 

In [42]: pos2[0] 
Out[42]: (0, 0) 

In [43]: pos2[99] 
Out[43]: (0, 99) 

In [44]: pos2[9900] 
Out[44]: (99, 0) 

In [45]: pos2[9999] 
Out[45]: (99, 99) 
+0

Это работает! Но если вы можете взглянуть на этот вопрос (http://stackoverflow.com/questions/33826967/matplotlib-how-to-mirror-an-image-with-respect-to-both-axes), вы увидите мой в целом проблема. Применяя ваш намек, я достигаю ситуации, когда мне нужно дополнительно отразить результат, на этот раз относительно оси y. Это означает, что я вижу свой исход * вверх ногами *. Я надеюсь, что образный образ в вопросе поможет вам понять. – FaCoffee