微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AttributeError:“ DiGraph”对象没有属性“ number_of_selfloops”

如何解决AttributeError:“ DiGraph”对象没有属性“ number_of_selfloops”

我正在尝试通过jupyter笔记本在我的PC中运行图形绘图代码。我的电脑中安装了Networkx,pygraphviz和nxpd。但是运行后我发现AttributeError

绘制(G,layout =“ circo”)

如何解决此问题? 错误在以下描述中:

AttributeError                            Traceback (most recent call last)
<ipython-input-2-d4524714330e> in <module>
----> 1 draw(G,layout='circo')

~/anaconda3/lib/python3.7/site-packages/nxpd/nx_pydot.py in draw_pydot(G,filename,format,prefix,suffix,layout,args,show)
    455 
    456     # Draw the image.
--> 457     G2 = to_pydot(G)
    458     G2.write(fobj,prog=prog,format=ext)
    459     if close:

~/anaconda3/lib/python3.7/site-packages/nxpd/nx_pydot.py in to_pydot(G,raise_exceptions)
    247         graph_type = 'graph'
    248 
--> 249     strict = G.number_of_selfloops() == 0 and not G.is_multigraph()
    250 
    251     # Create the Pydot graph.

AttributeError: 'DiGraph' object has no attribute 'number_of_selfloops'

代码如下:

import networkx as nx
import pygraphviz as pgv
from nxpd import draw,nxpdParams
nxpdParams['show'] = 'ipynb'
G = nx.DiGraph()


G.add_edge("a","b")
G.add_edge("b","c")
G.add_edge("c","d")
G.add_edge("d","e")
G.add_edge("e","c")
G.add_edge("a","d")
draw(G,layout='circo')

解决方法

软件包nxpd好像是最近几年更新的。您可以自己修改行(请参见https://github.com/chebee7i/nxpd/blob/master/nxpd/nx_pydot.py#L249),并与G.number_of_selfloops交换nx.number_of_selfloops(G)。 但是,我认为它们与nxpd有关的问题更多,我建议您仅将networkx自己的接口用于graphviz,例如graphviz_layout

pos = nx.nx_agraph.graphviz_layout(G,prog="circo")
nx.draw(G,pos)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。