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()
此处k
与1/np.sqrt(len(g.nodes()))
成正比,因此即使节点数量增加,节点仍然分离良好。
我正在尝试制作一个有数百条边的 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()
此处k
与1/np.sqrt(len(g.nodes()))
成正比,因此即使节点数量增加,节点仍然分离良好。