PGMPy和Networkx绘图时出现StopIteration错误。

5
我有一个使用pandas加载csv文件的python脚本,然后使用pgmpy在数据上学习贝叶斯网络。

在学习结构之后,我使用以下函数绘制图形:

nx.draw(graph_model, node_color='#00b4d9', with_labels=True)

这个在Ubuntu中能够完美运行,但是在我用来编译Mac版本的虚拟机中会抛出一个StopIteration错误。
它抛出的错误如下(我已经删除了路径,因为它包含项目名称,这是未发布的工作):
StopIteration: 
At:
  <path>/site-packages/matplotlib/bezier.py(352): split_path_inout
  <path>/site-packages/matplotlib/patches.py(2754): _shrink
  <path>/site-packages/matplotlib/patches.py(2771): _call_
  <path>/site-packages/networkx/drawing/nx_pylab.py(794): _connectionstyle
  <path>/site-packages/matplotlib/patches.py(4453): _get_path_in_displaycoord
  <path>/site-packages/matplotlib/patches.py(4440): get_path
  <path>/site-packages/matplotlib/axes/_base.py(2376): _update_patch_limits
  <path>/site-packages/matplotlib/axes/_base.py(2358): add_patch
  <path>/site-packages/networkx/drawing/nx_pylab.py(867): _draw_networkx_edges_fancy_arrow_patch
  <path>/site-packages/networkx/drawing/nx_pylab.py(889): draw_networkx_edges
  <path>/site-packages/networkx/drawing/nx_pylab.py(334): draw_networkx
  <path>/site-packages/networkx/drawing/nx_pylab.py(120): draw
  <path>/bayesian_network/draw_model.py(7): <module>

我已经检查了学习出的图形具有节点和边缘。如果我尝试只绘制一个节点的图形,则可以正常工作。

我已经升级了所有的软件包,包括pgmpy、matplotlib和networkx。

这个问题是否与在运行Mac虚拟机中执行的代码有关?目前我没有访问真正的Mac机器来测试它。


显然,从graph_model创建一个nx.DiGraph并绘制它是一种选择:nx.draw(nx.DiGraph(graph_model.edges()), node_color='#00b4d9', with_labels=True) - upe
1个回答

6

我最终通过将位置作为循环布局添加来解决了这个问题。在先前的版本中,它似乎会自动执行此操作,但在虚拟机中安装的新版本不会。

pos = nx.circular_layout(graph_model)

nx.draw(graph_model, node_color='#00b4d9', pos=pos, with_labels=True) 

1
感谢您,由于某些原因,Spring布局似乎不再起作用了。 要使用圆形布局,只需使用nx.draw_circular(graph_model, node_color='#00b4d9', with_labels=True)即可更加简单。 - MrJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接