Networkx - экспорт graphml с метками ребер, атрибутами высоты и ширины, пользовательскими изображениями - PullRequest
0 голосов
/ 26 июня 2018

Я хочу автоматизировать диаграмму топологии сети, используя python. Я новичок в Python, поэтому, пожалуйста, потерпите меня. Проведя некоторые исследования, я обнаружил, что я могу использовать python для создания графических файлов, которые могут быть прочитаны yEd. Я учусь использовать Networkx для создания файлов graphml. Пока я могу создавать узлы, подключать их и добавлять метки к узлам (эти метки будут именами хостов). Теперь мне нужно знать, как я могу добавить метки к краям (эти метки были бы интерфейсами). Например:

Пример топологии

Если возможно, я хотел бы знать, как добавить пользовательское изображение для каждого узла (по умолчанию фигура представляет собой квадрат, но я хотел бы использовать файл png маршрутизатора). Если это невозможно, было бы полезно узнать, как редактировать высоту и ширину фигуры, а также отключить стрелки. Я просмотрел документы на веб-сайте networkx, но не нашел, как внести эти изменения непосредственно в объект графа. Единственный способ, которым я это видел, - рисовать график, например, используя следующую функцию: nx.draw_networkx_labels (G, pos, метки, font_size = 15, стрелки = False), но это не то, что мне нужно, потому что это не сохраняется в файл graphml. Если кто-то может помочь мне в этом, это будет очень полезно, я прилагаю свой код:

import networkx as nx
import matplotlib
import matplotlib.pyplot as plt

g = nx.DiGraph()

g.add_node('Hostname_A')
g.add_node('Hostname_B')
g.add_node('Hostname_C')
g.add_node('Hostname_D')

g.add_edge('Hostname_A','Hostname_B')
g.add_edge('Hostname_A','Hostname_C')
g.add_edge('Hostname_B','Hostname_D')
g.add_edge('Hostname_B','Hostname_C')

for node in g.nodes():
    g.node[node]['label'] = node

nx.readwrite.write_graphml(g, "graph.graphml")

1 Ответ

0 голосов
/ 28 июня 2018

Это решение:

for edge in g.edges(): 
g.edges[edge]['source'] = 'int gi0/0/0' 
g.edges[edge]['destination'] = 'int gi0/0/1'
...