Networkx: сеть с параллельными краями - PullRequest
0 голосов
/ 06 июня 2019

Мне нужно разработать двухстороннюю сеть, в которой узлы берутся из столбцов '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()

Выход:

enter image description here

Когда я комментирую строки, начинающиеся с nx.draw_networkx_nodes и nx.draw_networkx_edges, и раскомментирую строку, начинающуюся с nx.draw, вывод выглядит следующим образом:

enter image description here

Я хотел бы сохранить предварительный просмотр как первое изображение, которое соответствует спецификациям для краев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...