Как рисовать параллельные ребра в Networkx/Graphviz

Я пытаюсь добавить параллельные ребра между двумя узлами с помощью NetworkX, но это не удается с приведенной ниже ошибкой. Что я делаю не так?

import networkx as nx
import graphviz

g1 = nx.MultiGraph()

node1 = 'a'
node2 = 'b'

g1.add_edge(node1,node2,key='one')
g1.add_edge(node1,node2,key='two')

A = nx.to_agraph(g1)
A.add_subgraph()

A.draw('test2.png', prog='dot')

Ошибка:

Traceback (most recent call last):
  File "test2.py", line 12, in <module>
    A = nx.to_agraph(g1)
  File "C:\python27\lib\site-packages\networkx-1.11rc1-py2.7.egg\networkx\drawing\nx_agraph.py", line 152, in to_agraph
    A.add_edge(u,v,key=str(key),**str_edgedata)
  File "C:\python27\lib\site-packages\pygraphviz\agraph.py", line 481, in add_edge
    eh = gv.agedge(self.handle, uh, vh, key, _Action.find)
KeyError: 'agedge: no key'

person TraderMoe    schedule 26.01.2016    source источник
comment
Супер старый вопрос, но я думаю, что networkx DiGraph не допускает параллельных ребер. Поэтому, когда вы добавляете ребро с помощью key='two', оно на самом деле не добавляется к графу.   -  person Jon    schedule 05.04.2021


Ответы (2)


Вы можете сделать то же самое без использования graphviz. Я добавляю connectionstyle в nx.draw:

import networkx as nx

g1 = nx.DiGraph(directed=True)

node1 = 'a'
node2 = 'b'

g1.add_edge(node1,node2,key=1)
g1.add_edge(node2,node1,key=2)

nx.draw(g1, with_labels=True, arrows = True, connectionstyle='arc3, rad = 0.1')

Посмотрите здесь результат

person AMangipinto    schedule 26.01.2020

Ваш код работает нормально, и я прикрепил выходное изображение.

введите здесь описание изображения

person Abdallah Sobehy    schedule 26.01.2016
comment
Спасибо за ответ Абдаллах. Это не работает. Это все еще дает мне ту же ошибку. Вы действительно пробовали этот код? А у вас работает? - person TraderMoe; 26.01.2016
comment
Извините, мой плохой, я сделал ошибку - person Abdallah Sobehy; 26.01.2016
comment
Да, я не копировал/вставлял свои определения узлов в первый раз. Но это все еще не работает. Я знаю, что мой синтаксис правильный, потому что, если я сделаю оба ключа одинаковыми, это не вызовет ошибку относительно синтаксиса. Может я что-то упускаю при установке пакетов. - person TraderMoe; 26.01.2016
comment
На самом деле ваш код сработал, и я прикрепил изображение, возможно, попробуйте переустановить пакеты. - person Abdallah Sobehy; 26.01.2016
comment
Я также попробовал код, и он работает, однако в моем случае импорт должен быть pygraphviz. - person Kirell; 26.01.2016
comment
Спасибо вам обоим за проверку кода. Импорт pygraphviz вместо graphviz или импорт обоих по-прежнему дает мне ту же ошибку. Я ничего не могу найти в этом сообщении об ошибке. Pygraphviz отлично работает с другими скриптами, которые я написал. Я делаю это в Windows. Попробую Linux-машину и посмотрим, как пойдет. - person TraderMoe; 26.01.2016
comment
Аналогичная проблема, чем: передача строки в agege в проблеме agraph py с networkx и pygraphviz"> stackoverflow.com/questions/35610736/, возможно, это ошибка компиляции или относительная ошибка Microsoft Windows - какую версию Windows вы используете? С уважением - person A STEFANI; 04.08.2016