繁体   English   中英

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

[英]Get nodes positions in a randomly generated graph

我已经使用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]])

在此处检查nx.spring_layout文档,查找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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM