2014-07-03 27 views
1

每隔一段时间一个情节我试图与canvas.print_figurematplotlib作图失败RuntimeError我不明白。对于我来说,提供一个最小的运行示例(特别是因为我不能真正复制它)将会非常复杂,但是我可以将这个调用和追踪放在这里,我希望有人能够指向我应该看的地方为了追查这个问题。“错误读取PNG标题”运行时错误

这里的函数调用:

canvas.print_figure(filename, papertype='a4', orientation='landscape', 
        dpi=300, format='png') 

其中canvasFigureCanvas实例,filename有点像picture1110101.png

以下是完整回溯(我把它换成长路径名用点):

Traceback (most recent call last): 
    File ".../draw.py", line 235, in plot 
    _plot(*args[1:], **kwargs) 
    File ".../draw.py", line 177, in _plot 
    dpi=dpi, format=ftype) 
    File ".../matplotlib/backend_bases.py", line 2093, in print_figure 
    **kwargs) 
    File ".../matplotlib/backends/backend_agg.py", line 491, in print_png 
    FigureCanvasAgg.draw(self) 
    File ".../matplotlib/backends/backend_agg.py", line 439, in draw 
    self.figure.draw(self.renderer) 
    File ".../matplotlib/artist.py", line 54, in draw_wrapper 
    draw(artist, renderer, *args, **kwargs) 
    File ".../matplotlib/figure.py", line 999, in draw 
    func(*args) 
    File ".../matplotlib/artist.py", line 54, in draw_wrapper 
    draw(artist, renderer, *args, **kwargs) 
    File ".../matplotlib/axes.py", line 2086, in draw 
    a.draw(renderer) 
    File ".../matplotlib/artist.py", line 54, in draw_wrapper 
    draw(artist, renderer, *args, **kwargs) 
    File ".../matplotlib/axis.py", line 1053, in draw 
    tick.draw(renderer) 
    File ".../matplotlib/artist.py", line 54, in draw_wrapper 
    draw(artist, renderer, *args, **kwargs) 
    File ".../matplotlib/axis.py", line 240, in draw 
    self.label1.draw(renderer) 
    File ".../matplotlib/artist.py", line 54, in draw_wrapper 
    draw(artist, renderer, *args, **kwargs) 
    File ".../matplotlib/text.py", line 576, in draw 
    self._fontproperties, angle) 
    File ".../matplotlib/backends/backend_agg.py", line 226, in draw_tex 
    Z = texmanager.get_grey(s, size, self.dpi) 
    File ".../matplotlib/texmanager.py", line 510, in get_grey 
    X = read_png(os.path.join(self.texcache, pngfile)) 
RuntimeError: _image_module::readpng: error reading PNG header 

因此,它看起来像一些相关的东西TeX。我使用TeX,我对包初始化文件的开头如下配置:

matplotlib.rc("text", usetex=True) 

任何提示?

+0

你可以尝试使用1.4.0rc1代码吗? – tacaswell

回答

2

当latex - > dvi - > png转换的png输出结束为一个空的但存在的文件时,会导致该问题。当mpl尝试读取png以将其添加到画布时发生错误,并且因为它不是有效的png(由于为空)而失败。

作为背景,这MPL插入乳胶与AGG的后端你的身材的方法是(IIRC):

  1. 插入您的乳胶字符串转换成模板
  2. 使系统调用乳胶渲染模板 - > DVI
  3. 转换DVI - >与dvipng
  4. png格式读回为PNG并将其插入到你的身材为图像

我只是想赶上例外,然后再试一次。

+0

谢谢!我明白,但为什么matplotlib会尝试*读取* png?输出后,是不是已经完成了? – Bach

+0

@Bach请参阅编辑 – tacaswell