Ниже приведено рабочее решение:
import csv
import networkx as nx
from matplotlib import pyplot as plt
with open('../resources/network.csv') as csvfile:
reader = csv.DictReader(csvfile)
edges = {(row['source'], row['destination']) for row in reader }
print(edges) # {('s1', 'c3'), ('s1', 's2'), ('s0', 'c2'), ('s2', 's0'), ('s2', 'c1')}
G = nx.DiGraph()
source_nodes = set([edge[0] for edge in edges])
G.add_edges_from(edges)
for n in G.nodes():
G.nodes[n]['color'] = 'b' if n in source_nodes else 'g'
pos = nx.spring_layout(G)
colors = [node[1]['color'] for node in G.nodes(data=True)]
nx.draw_networkx(G, pos, with_labels=True, node_color=colors)
plt.show()
Сначала мы читаем CSV в список ребер, который позже используется для построения G. Для правильного определения цветов мы устанавливаем каждый исходный узел синими остальные узлов зеленого цвета (т. е. все узлы назначения, которые также не являются исходными узлами ).
Мы также используем nx.draw_networkx
, чтобы получить более компактныйреализация для рисования графика.
Результат должен выглядеть примерно так:
