如何解决networkx:绘制多部分图时的节点间距
我想使用networkx
绘制多图。但是,添加更多节点时,情节变得非常拥挤。有没有办法在节点和分区之间留出更多空间?
看multipartite_layout
的文档,我找不到用于此的参数。
当然,可以为位置创建复杂的公式,但是由于multipartite_layout
的间距对于小图形来说已经很好了,我就是如何将其缩放到更大的图形。
有人知道如何(有效)做到这一点吗?
示例代码,生成具有三个分区的图形:
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()
当前拥挤的情节:
解决方法
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的注释等效。但是,这种方法为您提供了具有实际转换后的位置数据的优势。
最后,如果这种统一的转换不能满足您的需要,您总是可以在知道dict格式的情况下手动操作位置(尽管可能效率较低)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。