Как получить координаты (макет) графика с помощью networkx с помощью graphviz?

У меня есть граф с 3000 узлами. Я пытаюсь использовать механизм компоновки pydot, чтобы найти более приятную компоновку, чем компоновка networkx по умолчанию layout = nx.fruchterman_reingold_layout(G)

Пример из networkx doc

G_tst = nx.complete_graph(4)
pos = nx.nx_pydot.pydot_layout(G_tst )
pos = nx.nx_pydot.pydot_layout(G_tst , prog='dot')

работает нормально. Однако, когда я использую свой собственный график pos = nx.nx_pydot.pydot_layout(G), я получаю Type Error, где утверждается, что G имеет атрибут name более одного раза.

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-72-1326868cc786> in <module>()
      1 
----> 2 pos = nx.nx_pydot.pydot_layout(G)
      3 nx.draw(G, pos=pos)

C:\Anaconda3\lib\site-packages\networkx\drawing\nx_pydot.py in pydot_layout(G, prog, root, **kwds)
    261     """
    262     import pydotplus
--> 263     P=to_pydot(G)
    264     if root is not None :
    265         P.set("root",make_str(root))

C:\Anaconda3\lib\site-packages\networkx\drawing\nx_pydot.py in to_pydot(N, strict)
    200     for n,nodedata in N.nodes_iter(data=True):
    201         str_nodedata=dict((k,make_str(v)) for k,v in nodedata.items())
--> 202         p=pydotplus.Node(make_str(n),**str_nodedata)
    203         P.add_node(p)
    204 

TypeError: __init__() got multiple values for argument 'name'

Вот те node attributes, которые у меня есть:

`G.add_node(G.number_of_nodes(), 
           name=endNode.endWord, # string
           teaching_text=endNode.tt_corpus, # string
           definition=endNode.domainDef, # string
           search_string=endNode.searchKey_obj.search_key_str,
           name_len = len(endNode.endWord))` #int

person Itay Livni    schedule 18.04.2017    source источник


Ответы (1)


У меня вчера такая же ошибка. Я не уверен на 100 процентов, но похоже, что некоторые внутренние переменные конфликтуют с вашим атрибутом «name». В моем случае я меняю его на «name_», тогда он работает.

person Xuan    schedule 03.05.2017
comment
У меня возникла та же проблема, которая была решена изменением имени атрибута узла name. - person ritzdiamond; 31.10.2018
comment
То же самое случилось со мной: у меня был атрибут name, определенный в каждом узле. Изменил это на что-то другое и решил проблему ... - person Lucas Aimaretto; 12.04.2020