networkx 图中的间距节点问题

Issue with spacing nodes in networkx graph

我正在尝试制作一个有数百条边的 networkx 图:

def generate_network_graph(graph):
    visual_graph = networkx.Graph()
    for edge in graph.edges:
        visual_graph.add_edge(edge.actor.name, edge.movie.title)
    plt.figure(3, figsize=(30, 30))
    networkx.spring_layout(visual_graph, k=0.9, iterations=20)
    networkx.draw_spring(visual_graph)
    plt.show()

然而,无论我似乎将 k 增加多少,我的图表看起来都像一团乱麻:

我不确定还能做什么来防止节点重叠;我尝试了从 0.0 到 5.0 的一系列 k 值。我考虑过减小节点的大小,但我不确定这是否只会降低图表的可读性。不仅如此,重新生成这张图还需要很长的时间,大约 15 分钟。我只是没有使用正确的图形库来完成这项工作吗?或者有什么我可以修改以使我的图表更清晰的东西。

来自文档

k : float (default=None) Optimal distance between nodes. If None the distance is set to 1/sqrt(n) where n is the number of nodes. Increase this value to move nodes farther apart.

您可以尝试以下方法:

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np

# Set an exemple graph
edge_list = [(1,2),(2,0),(2,4),(3,4)]
g = nx.Graph(edge_list)

# plot
pos = nx.spring_layout(g, k=0.3*1/np.sqrt(len(g.nodes())), iterations=20)
plt.figure(3, figsize=(30, 30))
nx.draw(g, pos=pos)
nx.draw_networkx_labels(g, pos=pos)
plt.show()

此处k1/np.sqrt(len(g.nodes()))成正比,因此即使节点数量增加,节点仍然分离良好。