我有一个大约有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()
具有原始数据帧的网络如下所示:
我的问题如下:使用networkx绘制具有这么多节点的网络是否合适?如果是,如何改善网络视图?如果没有,我该怎么做才能改善网络视图?
答案 0 :(得分:0)
我认为部分原因是您的节点大小太大,这会使整个图像看起来很混乱。您可以将其从100更改为更小的值,然后查看它是否满足您的需求。
此外,您可以检查大量节点的布局是否更好。
尝试以下代码以获得可用的布局:
[x for x in nx.__dir__() if x.endswith('_layout')]