Имеется ли встроенная функция для добавления меток ребер к графику в библиотеке networkx
. AFAIK вы можете установить их с помощью функции nx.set_edge_attributes()
. Но мне было интересно, можно ли было бы пропустить это и не делать это вручную, если у вас уже есть информация о метках ребер в структуре вашего графика.
Например, учитывая следующий словарь словарей, в которых ключи - это узлы, а внутренние словари - это метки назначения и края соответственно. Например:
z = {'224': {'0': 'a'}, '0': {'217': 'b', '224': 'k'}, '217': {'220': 'c'}, '246': {'10': 'd'}, '10': {'241': 'f', '246': 'l'},
'241': {'220': 'g'}, '11': {'22': 'p', '23': 'i'}, '22': {'9': 'p'}}
В вышеприведенном словаре '224 будет узел, связанный с' 0 'с меткой' a '.
Я знаю, что могу создать график, используя:
Z = nx.DiGraph(z)
И вычерчиваем его, используя:
pos = nx.spring_layout(Z)
nx.draw(Z, pos, with_labels=True, font_weight='bold')
Я попытался добавить метки вручную из z, но не смог уловить случай, когда узел подключен к более чем одному узлу со своей собственной меткой ребра, по крайней мере, как ожидалось.
То, что я до сих пор пробовал, было:
edge_labels = dict()
for (k, v), e in zip(z.items(), Z.edges()):
for x, y in v.items():
edge_labels[e] = {'attr1': y}
А затем добавьте эти метки:
nx.set_edge_attributes(Z, edge_labels)
Но выдает ошибку и выдает следующий неправильный вывод при просмотре краев с помощью Z.edges(data=True)
:
Out[38]: OutEdgeDataView([('224', '0', {'attr1': 'a'}), ('0', '217', {'attr1': 'k'}), ('0', '224', {'attr1': 'c'}), ('217', '220', {'attr1': 'd'}), ('246', '10', {'attr1': 'l'}), ('10', '241', {'attr1': 'g'}), ('10', '246', {'attr1': 'i'}), ('241', '220', {'attr1': '8'}), ('11', '22', {}), ('11', '23', {}), ('22', '9', {})])
Я что-то упускаю здесь очевидное?
Ожидаемый результат должен выглядеть следующим образом:
Out[39]: OutEdgeDataView([('224', '0', {'attr1': 'a'}), ('0', '217', {'attr1': 'b'}), ('0', '224', {'attr1': 'k'}), ('217', '220', {'attr1': 'c'}), ('246', '10', {'attr1': 'd'}), ('10', '241', {'attr1': 'f'}), ('10', '246', {'attr1': 'l'}), ('241', '220', {'attr1': 'g'}), ('11', '22', {'attr1': 'p'}), ('11', '23', {'attr1': 'i'}), ('22', '9', {'attr1': 'p'})])