Python 2.7 NetworkX(使其具有交互性)

时间:2015-07-23 07:11:19

标签: python python-2.7 matplotlib networkx sna

我是NetworkX的新手。现在,我设法将所有节点连接到此特定节点。我接下来要做的是使它具有交互性,例如能够通过使用游标拖动来使每个节点移动。我知道我必须使用matplotlib,但我不知道如何使用它。任何人都可以帮助我吗?

enter image description here

我的代码是:

import matplotlib.pyplot as plt
import networkx as nx
import itertools

d = [name of nodes]
f = [number per nodes]

for i in d:
  G.add_edge('"' + i + '"',b)

pos=nx.fruchterman_reingold_layout(G, k=0.5, iterations=5)

nx.draw_networkx_nodes(G,pos,node_size=130, node_color="white")

nx.draw_networkx_edges(G,pos, width=0.2,alpha=1,edge_color='black')

nx.draw_networkx_labels(G,pos,font_size=7,font_family='sans-serif')

for i,j in itertools.izip(d,f):
    nx.draw_networkx_edge_labels(G,pos, {('"' + i + '"',b):j}, font_size=7, label_pos= 0.80)

plt.axis('off')
plt.show()

2 个答案:

答案 0 :(得分:5)

使用matplotlib似乎很难(它实际上并不是为此设计的)。 Networkx绘图模块非常差,它主要使用节点的自定义散点图等。

我建议另一个解决方案:

  • 将图表导出为JSON或GEXF,并使用Javascript图形绘制库使图表具有交互性,例如:SigmaJsVivaGraphJs

您可以在my blog的网页上找到使用NetworkX创建的真实图表示例。在此示例中,节点是静态的,但单击节点会突出显示其邻居。

拟议的交互式图形绘制库的官方示例:

答案 1 :(得分:4)

Matplotlib的设计更多是针对静态图形和图表。

然而,一旦将NetworkX图形导出为GEXF格式,就会有一个工具可以让您根据位置或标准选择区域以便移动它。该工具名为Gephi。您可以使用布局来开始,也可以像数据科学家那样深入。