我怎样才能在 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')
如果需要高精度分析边缘,可读性差,但如果更关心节点,则更好。
我在 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')
如果需要高精度分析边缘,可读性差,但如果更关心节点,则更好。