Networkx:具有许多节点的网络

时间:2019-06-01 17:41:20

标签: python networkx

我有一个大约有8800行的数据框,我想从那里用networkx生成一个网络。用于网络生成的数据帧的基本结构如下所示:

df = pd.DataFrame({'id_emp':[13524791000109, 12053850000137, 4707821000113],
               'name_dep': ['DIONILSO MATEUS MARCON', 'JOSE AUGUSTO ROSA', 'LUCIO ANTONIO MOSQUINI'],
               'roi':[12, 15, 18]
              })

在我要表示的网络中,有两种类型的节点:'id_emp'和'name_dep',并且在同一行上的每对值都有一对边。因此,该网络将具有17,600个节点。边缘将具有基于roi列的权重。创建网络的代码如下:

import networkx as nx
G = nx.Graph()
G.add_nodes_from(df['id_emp'], type_='id_emp')
for node in G.nodes:
    G.nodes[node]['fornecedor'] = df[df['id_emp'] == node]['fornecedor'].values[0]

G.add_nodes_from(df['name_dep'], type_='name_dep')

G.add_weighted_edges_from(df[['id_emp', 'name_dep', 'roi']].values)

colors = ['#0000FF' if G.nodes[n]['type_'] == 'id_emp' else '#FF0000' for n in G.nodes]

edge_width = [a[2]['weight'] for a in G.edges(data=True)]

plt.figure(figsize=(7.5,7.5))

nx.draw(G, pos = nx.kamada_kawai_layout(G), node_size = 100, 
node_color = colors, with_labels=False, edge_cmap=plt.cm.Blues)
nx.draw_networkx_edges(G,pos=nx.kamada_kawai_layout(G),width=edge_width)
plt.axis('off')
plt.show()

具有原始数据帧的网络如下所示:

enter image description here

我的问题如下:使用networkx绘制具有这么多节点的网络是否合适?如果是,如何改善网络视图?如果没有,我该怎么做才能改善网络视图?

1 个答案:

答案 0 :(得分:0)

我认为部分原因是您的节点大小太大,这会使整个图像看起来很混乱。您可以将其从100更改为更小的值,然后查看它是否满足您的需求。

此外,您可以检查大量节点的布局是否更好。

尝试以下代码以获得可用的布局:

[x for x in nx.__dir__() if x.endswith('_layout')]