Мне нужно разработать двухстороннюю сеть, в которой узлы берутся из столбцов 'id_emp' и 'name_dep' в приведенном ниже кадре данных:
import networkx as nx
import pandas as pd
df = pd.DataFrame({'id_emp':[13524791000109, 12053850000137, 4707821000113, 4707821000114],
'name_emp':['Cristiano', 'Gaúcho', 'Fenômeno','Angelin'],
'name_dep': ['Ronaldo','Ronaldo', 'Ronaldo', 'Ronaldo'],
'peso': [8,9,10,11]})
По краям:
1 - они имеют вес, определенный в столбце «вес»;
2 - Они должны быть направлены;
3 - В оригинальной работе должны демонстрироваться отношения обмена, тогда между двумя узлами должно быть два параллельных ребра;
Я пытаюсь использовать следующий код:
G = nx.MultiDiGraph()
G.add_nodes_from(df['id_emp'], bipartite = 0)
deputados = [v for v in G.nodes if G.nodes[v]['bipartite'] == 0]
G.add_nodes_from(df['name_dep'], bipartite = 1)
empresa = [v for v in G.nodes if G.nodes[v]['bipartite'] == 1]
G.add_weighted_edges_from(df[['id_emp', 'name_dep', 'peso']].values)
edge_width = [a[2]['weight']//2 for a in G.edges(data=True)]
deputado = "Ronaldo"
lista_subset_graph = list(df[df["name_dep"] == deputado]["id_emp"]) + [deputado]
H = G.subgraph(lista_subset_graph)
nx.draw_networkx_nodes(H, pos = nx.spring_layout(H), nodelist = deputados, node_color='#bfbf7f', node_shape="h", node_size=3000, with_labels = True)
nx.draw_networkx_nodes(H, pos = nx.spring_layout(H), nodelist = empresa, node_color='#9f9fff', node_size=3000, with_labels = True)
nx.draw_networkx_edges(H, pos = nx.spring_layout(H),width=edge_width, alpha=0.2)
#nx.draw(H, style = "solid", with_labels = True)
plt.figure(figsize=(7.5, 7.5))
plt.show()
Выход:
Когда я комментирую строки, начинающиеся с nx.draw_networkx_nodes
и nx.draw_networkx_edges
, и раскомментирую строку, начинающуюся с nx.draw
, вывод выглядит следующим образом:
Я хотел бы сохранить предварительный просмотр как первое изображение, которое соответствует спецификациям для краев.