4

我在 ipython 笔记本中使用以下代码将条形图另存为 .png 文件:
plt.savefig(filename, bbox_inches='tight')

它适用于我的计算机,我尝试在另一台计算机上运行脚本。但是,当我尝试在另一台机器上运行它时出现以下错误。

AssertionError
---> 119 plt.savefig(filename,bbox_inches='tight')

C:\Python27\lib\site-packages\matplotlib\pyplot.pyc in savefig(*args,**kwargs)
---> 472 self.canvas.print_figure(*args,**kwargs)

C:\Python27\lib\site-packages\matplotlib\figure.pyc in savefig(self,*args,**kwargs)
---> 1363 self.canvas.print_figure(*args,**kwargs)

C:\Python27\lib\site-packages\matplotlib\backend_bases.pyc
---> 2054 bbox_inches = self.figure.get_tightbbox(renderer)

C:\Python27\lib\site-packages\matplotlib\figure.pyc in get_tightbbox(self,renderer)
---> 1496 _bbox = Bbox.union([b for b in bb if b.width!=0 or b.height!=0])

C:\Python27\lib\site-packages\matplotlib\transforms.pyc in union(bboxes)
---> 714 assert(len(bboxes))

AssertionError:

删除 bbox_inches='tight' 参数似乎可以解决错误并保存一个文件,但那里没有图片,只有一个完全空白的 .png 文件。

我已经确保我们的 python、matplotlib 和其他包的版本都是一样的。有没有人遇到过这个?我认为这可能是 matplotlib 中的一个错误,但这没有任何意义,因为它在我的计算机上运行良好,而且我们有相同的版本。有什么想法或建议吗?

4

4 回答 4

4

这通常意味着没有图形被渲染到画布上。这也解释了为什么,当您删除参数时,没有相应的图像!例如:

import pylab
pylab.savefig('test', bbox_inches='tight')

产生类似的错误:

    pylab.savefig('test', bbox_inches='tight')
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 471, in savefig
    return fig.savefig(*args, **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/figure.py", line 1185, in savefig
    self.canvas.print_figure(*args, **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/backend_bases.py", line 1985, in print_figure
    bbox_inches = self.figure.get_tightbbox(renderer)
  File "/usr/lib/pymodules/python2.7/matplotlib/figure.py", line 1326, in get_tightbbox
    _bbox = Bbox.union([b for b in bb if b.width!=0 or b.height!=0])
  File "/usr/lib/pymodules/python2.7/matplotlib/transforms.py", line 675, in union
    assert(len(bboxes))
于 2013-04-24T04:23:45.153 回答
3

我有同样的错误信息。我通过gui显示图像然后保存它,这产生了错误。我通过首先保存它然后才显示它来解决它。

于 2014-08-11T16:05:20.457 回答
1

内联运行 ipython 时产生错误。

ipython.exe notebook --pylab=inline

要解决此问题,只需删除 '=inline'。

于 2013-05-10T02:46:33.250 回答
1

在我自己的代码中,我通过调用savefig图形而不是从 pyplot ( plt.savefig()) 来“解决”这个问题,即:

fig.savefig(filename, bbox_inches='tight')

fig的实例在哪里matplotlib.figure.Figure。这对我来说不是问题,因为ipython它源于尝试在一个长循环中更新和绘制图形。

于 2015-03-23T23:07:46.517 回答