首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用NetworkX的rescale_layout?

如何使用NetworkX的rescale_layout?
EN

Stack Overflow用户
提问于 2020-08-20 00:28:12
回答 1查看 962关注 0票数 0

我很难理解如何使用NetworkX的rescale_layout

文档中写着:pos (numpy array) – positions to be scaled. Each row is a position,这不是NetworkX的其他绘图用的标准“位置字典”。我曾试图在"pos“上使用NetworkX的to_numpy_array,但没有成功,to_numpy_array的输出是一个与rescale_layoutEach position is one row of the array要求不相匹配的Graph adjacency matrix

我之所以问这个问题,是因为我有一个网络,它是由一些数据生成的,然后由spring_layout移动,但是有些位置不是以“很好”的方式生成的,所以我已经实现了一种手动调整这些位置的方法,如果网络保证其位置总是位于某个预定义的边界内(例如,地块中的- 10,10),这将更容易实现。然后,我需要在节点上方写入节点标签。

附加问题:我想在(x,y+r)位置写标签,其中r是绘制节点的半径。通过获取输入节点大小的平方根并将其除以任意因子,我有一种被黑客攻击的方法。但是,我不知道绘制的节点大小实际上是如何确定的,我制作的每个单独的图对每个图似乎都有不同的内部标度,而绘制的节点大小似乎保持不变。

我已经浏览了大量的文档,试图理解底层的方法,但是我剥离的每一层只会增加更多的混乱。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-20 13:13:44

这是布局的一个示例:

代码语言:javascript
复制
pos = nx.random_layout(G)

它被分配到一本字典里,它看起来像:

代码语言:javascript
复制
{0: array([0.81931883, 0.8001609 ], dtype=float32), 
 1: array([0.89695644, 0.6070644 ], dtype=float32), 
 2: array([0.89160234, 0.47174907], dtype=float32), 
 3: array([0.20430276, 0.8206253 ], dtype=float32), 
 4: array([0.27929142, 0.08657268], dtype=float32)}

现在,由于nx.rescale_layout()的输入应该是numpy数组,所以可以使用命令提取它

代码语言:javascript
复制
np.array(list(pos.values()))

请注意,在其他版本的Python上,这种方式可能是different。我将举例说明pos参数重新标度后发生了哪些变化:

代码语言:javascript
复制
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np

G = nx.Graph()
G.add_edges_from([[0,1],[1,2],[2,3],[3,4],[4,0]])
pos = nx.random_layout(G)
coords = np.array(list(pos.values()))

fig, ax = plt.subplots()
plt.subplot(211)
nx.draw_networkx(G, pos, with_labels=True)
plt.axis('on'); plt.tick_params(left=True, bottom=True, labelleft=True, labelbottom=True) #force axis to turn on

plt.subplot(212)
new_pos = nx.rescale_layout(coords)
nx.draw_networkx(G, new_pos, with_labels=True)
plt.axis('on'); plt.tick_params(left=True, bottom=True, labelleft=True, labelbottom=True) #force axis turn on
plt.show()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63496724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档