首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >networkx:绘制多部图时的节点间距

networkx:绘制多部图时的节点间距
EN

Stack Overflow用户
提问于 2020-10-12 01:02:42
回答 1查看 592关注 0票数 0

我想用networkx绘制一个多点图。但是,当添加更多节点时,绘图会变得非常拥挤。有没有办法在节点和分区之间有更多的空间?

在查看multipartite_layout的文档时,我找不到与此相关的参数。当然,可以为位置创建复杂的公式,但由于multipartite_layout的间距对于小图形已经很好了,我正在研究如何将其缩放到更大的图形。

有没有人知道如何(有效地)做到这一点?

示例代码,生成包含三个分区的图:

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


# build graph:
G = nx.Graph()
for i in range (0,30):
    G.add_node(i,layer=0)
for i in range (30,50):
    G.add_node(i,layer=1)
    for j in range(0,30):
        G.add_edge(i,j)
G.add_node(100,layer=2)
G.add_edge(40,100)

# plot graph
pos = nx.multipartite_layout(G, subset_key="layer",)
plt.figure(figsize=(20, 8))
nx.draw(G, pos,with_labels=False)
plt.axis("equal")
plt.show()

当前,拥挤的情节:

EN

回答 1

Stack Overflow用户

发布于 2020-11-18 09:38:55

nx.multipartite_layout返回如下格式的字典:{node: array([x, y])}

我建议您尝试使用pos = {p:array_op(pos[p]) for p in pos},其中array_op是作用于每个节点array([x, y])的位置的函数。

在您的情况下,我认为沿x轴的简单缩放就足够了,即

array_op = lambda x, sx: np.array(x[0]*sx, x[1])

为了可视化的目的,我想这应该等同于@JPM的评论。然而,这种方法给你带来了拥有实际转换后的位置数据的优势。

最后,如果这种统一转换不能满足您的需要,您始终可以在了解字典格式的情况下手动操作位置(尽管效率可能较低)。

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

https://stackoverflow.com/questions/64306769

复制
相关文章

相似问题

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