我怎样才能在 networkx python 包中看到一个明显的密集图?

how can I visual a dense graph obviously in networkx python package?

我在 python 中有一个大而密集的有向图,是用 NetworkX 包制作的。如何提高图形图像的清晰度?

下图显示了我的图表。

我可以根据图表的大小向您推荐几种改进图表可视化的方法。


如果你想可视化一个大图(>1000 个节点),你可以阅读 中的一些技巧。在你的情况下,我建议你将图形导入大矢量图:

import networkx as nx 
import matplotlib.pyplot as plt 
fig = plt.figure(figsize=(40, 40)) 
G = nx.fast_gnp_random_graph(300, 0.02, seed=1337) 
nx.draw(G, node_size=30) 
plt.axis('equal') 
plt.show() 
fig.savefig('waka.svg') 

如果您的图表相对较小(<1000 个节点),您可以使用图表布局。

最适合您的图表的布局是默认布局 spring_layout。它有 k 参数来设置节点之间的最佳距离。这是示例:

默认k值

import networkx as nx
import random
random.seed(1234)
G = nx.fast_gnp_random_graph(30, 0.4, seed=1337)
for i in range(20):
    G.add_edge(i + 40, random.randint(1, 30))
    G.add_edge(i + 40, random.randint(1, 30))
pos = nx.spring_layout(G, seed=4321)
nx.draw(G, pos=pos, node_size=30, node_color='red')

放大k值

import networkx as nx
import random
random.seed(1234)
G = nx.fast_gnp_random_graph(30, 0.4, seed=1337)
for i in range(20):
    G.add_edge(i + 40, random.randint(1, 30))
    G.add_edge(i + 40, random.randint(1, 30))
pos = nx.spring_layout(G, seed=4321, k=2)
nx.draw(G, pos=pos, node_size=30, node_color='red')

如果需要高精度分析边缘,可读性差,但如果更关心节点,则更好。