Networkx:如何更改节点索引

时间:2015-11-20 14:18:09

标签: python grid position coordinates networkx

我正在使用100x100=10000个节点的常规网络。网络就像这样创建:

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 个答案:

答案 0 :(得分: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)