Цвет узлов по сетиx - PullRequest
       8

Цвет узлов по сетиx

0 голосов
/ 29 января 2019

Я генерирую диаграмму топологии сети на основе данных в файле csv, где s0..s2 и c1..c3 - узлы диаграммы.

network.csv:

источник, порт, пункт назначения

s1,1, c3

s2,1, c1

s0,1, c2

s1,2, s2

s2,2, s0

Мне нужно, чтобы все источники были голубыми, а пункты назначения - зелеными.Как я могу сделать это без переопределения исходных узлов?

1 Ответ

0 голосов
/ 29 января 2019

Ниже приведено рабочее решение:

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, чтобы получить более компактныйреализация для рисования графика.

Результат должен выглядеть примерно так:

enter image description here

...