在随机生成的图中获取节点位置

时间:2018-03-21 18:17:58

标签: python-3.x networkx scikit-image

我使用NetworkX库生成了一个随机图。现在,我想得到每个节点的(x,y)坐标。

我尝试了什么?

import sys

import matplotlib.pyplot as plt
import networkx as nx
import random as random
from random import randint
import numpy as np
from itertools import chain

G = nx.balanced_tree(3,3)

node_positions = nx.spring_layout(G)

我得到了什么?

node_positions
Out[56]: 
{0: array([ 0.50797246,  0.47719004]),
 1: array([ 0.4737295 ,  0.80685253]),
 2: array([ 0.61668036,  0.5967835 ]),
 3: array([ 0.45314193,  0.18113052]),
 4: array([ 0.74582   ,  0.88535594]),
 5: array([ 0.28304618,  0.73784419]),
 6: array([ 0.22814727,  0.91634686]),
 7: array([ 0.90767018,  0.55866571]),
 8: array([ 0.22321579,  0.57663404]),
 9: array([ 0.82803591,  0.73905281]),
 10: array([ 0.15093966,  0.24096575]),
 11: array([ 0.41389402,  0.01848409]),
 12: array([ 0.74298423,  0.10585789]),
 13: array([ 0.95692361,  0.70135218]),
 14: array([ 0.9333499 ,  0.77529735]),
 15: array([ 0.59008687,  0.99666832]),
 16: array([ 0.40042269,  0.97903855]),
 17: array([ 0.12273361,  0.54150101]),
 18: array([ 0.21783263,  0.46879425]),
 19: array([ 0.1477097 ,  0.86215834]),
 20: array([ 0.31065064,  0.9689898 ]),
 21: array([ 0.0734333 ,  0.75194536]),
 22: array([ 0.97066494,  0.34137316]),
 23: array([ 0.8496917 ,  0.86787867]),
 24: array([ 1.        ,  0.43286285]),
 25: array([ 0.        ,  0.48385456]),
 26: array([ 0.12788817,  0.75838036]),
 27: array([ 0.0137882 ,  0.39184635]),
 28: array([ 0.99627758,  0.57863309]),
 29: array([ 0.89164448,  0.82786694]),
 30: array([ 0.71802896,  0.9607354 ]),
 31: array([ 0.18064846,  0.12315356]),
 32: array([ 0.00104408,  0.53985017]),
 33: array([ 0.0779511 ,  0.23378722]),
 34: array([ 0.58219827,  0.01923722]),
 35: array([ 0.30061834,  0.04107663]),
 36: array([ 0.49707994,  0.        ]),
 37: array([ 0.69939259,  0.04731438]),
 38: array([ 0.84674553,  0.13220172]),
 39: array([ 0.87227266,  0.21870199])}

我在找什么?

(x,y)空格坐标,例如{0:array([15.5,38])},使x_coord为15.5,y_coord为38。

然而,我无法理解{0: array([ 0.50797246, 0.47719004])} 这是否意味着x_coord=0.50797246y_coord=0.47719004

如果是这样的话,那就意味着grahes的所有节点都在同一个节点,因为这里的最大值是1 !!

我正在寻找像skimage中的整数坐标:

segments_slic = slic(img, n_segments=150, compactness=0.01, sigma=1)
segments_slic=segments_slic +1
regions = regionprops(segments_slic) 

如果我们想获得坐标(x,y),我们只需要regions[0].coords 然后我们得到:

regions[0].coords
array([[ 0,  0],
       [ 0,  1],
       [ 0,  2],
       ..., 
       [27, 46],
       [27, 47],
       [27, 48]])

1 个答案:

答案 0 :(得分:1)

检查nx.spring_layout个文档here,查找scalek个参数:

  

比例(数字(默认值:1)) - 位置的比例因子。除非已修复,否则不使用。

  

k(float(默认=无)) - 节点之间的最佳距离。如果为None,则距离设置为1 / sqrt(n),其中n是节点数。增加此值可以将节点移动得更远。

关于获取整数坐标,您可以使用int轻松完成此操作。

positions = { node: (int(pos[0]),int(pos[1])) for node,pos in node_positions.items() }

[编辑]
k是Fruchterman-Reingold布局算法的参数,它是节点之间排斥力的一种。
我最好展示一下它的作用(同一个图表用不同的k表示):

<强> K = 0.001

k=0.001

<强> K = 0.1

k=0.1