计算并绘制一个加权networkx图,其边长与权重相对应

2024-04-26 04:17:32 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个networkx图表:

g=nx.gnm_random_graph(5,5)
for u,v,w in g.edges(data=True):
    w = np.random.randint(0,10)

我想把它表示为每个边都有一个固定的长度(它的权重值)。我所看到的网络本质上是放射状的——我事先知道这是可能的(我没有unutbu的评论here)中提出的限制。在

我想随机计算节点的坐标(有固定的边长度约束)并绘制它们。然后我想把所有没有边连接的节点之间的距离制成表格。在

从我目前所读到的内容来看,networkx绘制节点时不考虑边的长度。但节点位置可以明确定义。所以我需要写一个函数来计算节点的位置。在

有没有人知道networkx或其他可能有助于此的功能?在

更一般地说,networkx是否适合此任务?在


Tags: innetworkxtruefordata节点np图表
1条回答
网友
1楼 · 发布于 2024-04-26 04:17:32

我无意中发现了这一点,尽管它相当古老,我还是会尽力给出一个答案:

首先,我尝试了你的代码,但它似乎不起作用。在

In [60]:  for u,v,w in g.edges(data=True):
    ...:      w = np.random.randint(0,10)

给了我

^{pr2}$

所以权重都保持为“1”。这是合乎逻辑的,因为您只改变'w'而不是边的参数'weight'。您可以使用以下方法来实现:

In [62]:  for u,v in g.edges():
    ...:      g[u][v]['weight'] = np.random.randint(0,10)

这给了你

In [63]:  list(g.edges_iter(data='weight',default = 1))
Out[64]:  [(0, 4, 1), (0, 2, 8), (1, 2, 7), (2, 3, 3), (2, 4, 8)]

节点的放置是通过传递每个节点的x和y坐标来完成的。这样的听写可以通过使用networkx放置算法来获得,这可以在这里networkx.drawing.layout。使用networkx.circular_布局作为基础,可以使用numpy从中心向外构建图形坐标。这当然需要一些简单的三角函数,并且只有在系统没有过度确定的情况下才有效。在

相关问题 更多 >

    热门问题