Python matplotlib 1.20中显示quvier键和修补程序的错误解决方法

Python matplotlib 1.20中显示quvier键和修补程序的错误解决方法,python,numpy,matplotlib,Python,Numpy,Matplotlib,嘿 我正在使用随macports分发的matplotlib的最新版本(1.2.0)。我遇到了一个运行此代码的断言错误(我猜是源于内部测试) #!/usr/bin/env python import numpy as np import matplotlib.pyplot as plt X,Y = np.meshgrid(np.arange(0, 2*np.pi, .2), np.arange(0, 2*np.pi, .2)) U = np.cos(X) V = np.sin(Y) Q =

我正在使用随macports分发的matplotlib的最新版本(1.2.0)。我遇到了一个运行此代码的断言错误(我猜是源于内部测试)

#!/usr/bin/env python

import numpy as np
import matplotlib.pyplot as plt

X,Y = np.meshgrid(np.arange(0, 2*np.pi, .2), np.arange(0, 2*np.pi, .2))
U = np.cos(X)
V = np.sin(Y)

Q = plt.quiver(U, V)
plt.quiverkey(Q, 0.5, .9, 1., 'Label')

plt.gca().add_patch(plt.Circle((10, 10), 1))
plt.savefig('test.pdf')
我需要此代码的三个部分来重现错误:

  • 箭袋图必须有一个使用箭袋键创建的键
  • 必须向当前轴添加附加面片
  • 我必须将图保存为PDF格式(我可以很好地显示)
  • 该错误不依赖于后端。我得到的回溯显示

    Traceback (most recent call last):
      File "./test_quiver.py", line 15, in <module>
        plt.savefig('test.pdf')
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/pyplot.py", line 472, in savefig
        return fig.savefig(*args, **kwargs)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/figure.py", line 1363, in savefig
        self.canvas.print_figure(*args, **kwargs)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backend_bases.py", line 2093, in print_figure
        **kwargs)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backend_bases.py", line 1845, in print_pdf
        return pdf.print_pdf(*args, **kwargs)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_pdf.py", line 2301, in print_pdf
        self.figure.draw(renderer)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.py", line 54, in draw_wrapper
        draw(artist, renderer, *args, **kwargs)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/figure.py", line 999, in draw
        func(*args)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.py", line 54, in draw_wrapper
        draw(artist, renderer, *args, **kwargs)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axes.py", line 2086, in draw
        a.draw(renderer)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.py", line 54, in draw_wrapper
        draw(artist, renderer, *args, **kwargs)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/quiver.py", line 306, in draw
        self.vector.draw(renderer)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.py", line 54, in draw_wrapper
        draw(artist, renderer, *args, **kwargs)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/collections.py", line 755, in draw
        return Collection.draw(self, renderer)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.py", line 54, in draw_wrapper
        draw(artist, renderer, *args, **kwargs)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/collections.py", line 259, in draw
        self._offset_position)
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_pdf.py", line 1548, in draw_path_collection
        output(*self.gc.pop())
      File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_pdf.py", line 2093, in pop
        assert self.parent is not None
    AssertionError
    
    回溯(最近一次呼叫最后一次):
    文件“/test_quiver.py”,第15行,在
    plt.savefig('test.pdf')
    savefig中的文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/pyplot.py”,第472行
    返回图savefig(*args,**kwargs)
    savefig中的文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/figure.py”,第1363行
    self.canvas.print_图(*args,**kwargs)
    文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/backend_base.py”,第2093行,如图所示
    **kwargs)
    文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/backend_base.py”,第1845行,印刷版pdf
    返回pdf.print_pdf(*args,**kwargs)
    文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/backends/backend_pdf.py”,第2301行,印刷版_pdf
    self.figure.draw(渲染器)
    文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/artist.py”,第54行,在draw_包装中
    绘制(艺术家、渲染器、*args、**kwargs)
    文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/figure.py”,绘图中第999行
    func(*args)
    文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/artist.py”,第54行,在draw_包装中
    绘制(艺术家、渲染器、*args、**kwargs)
    文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/axes.py”,第2086行,在绘图中
    a、 绘制(渲染器)
    文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/artist.py”,第54行,在draw_包装中
    绘制(艺术家、渲染器、*args、**kwargs)
    文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/quiver.py”,绘图中第306行
    self.vector.draw(渲染器)
    文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/artist.py”,第54行,在draw_包装中
    绘制(艺术家、渲染器、*args、**kwargs)
    文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/collections.py”,绘图中第755行
    return Collection.draw(自绘制、渲染器)
    文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/artist.py”,第54行,在draw_包装中
    绘制(艺术家、渲染器、*args、**kwargs)
    文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/collections.py”,绘图中第259行
    自偏移(位置)
    文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/backends/backend_pdf.py”,第1548行,在draw_path_集合中
    输出(*self.gc.pop())
    pop格式的文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/matplotlib/backends/backend_pdf.py”,第2093行
    assert self.parent不是None
    断言错误
    

    如果这很重要:我使用的是MacOSX10.7.5,使用的是python 2.7.3和matplotlib 1.2.0。你也会得到这个错误吗?它是matplotlib中的一个bug吗?它依赖于系统吗?是否有一些解决方法?

    您可以另存为eps或svg并转换为pdf。我发现生成小型pdf文件的最佳方法是在matplotlib中另存为eps,然后使用epstopdf

    svg也可以正常工作,您可以使用Inkscape将其转换为pdf。svg的一个副作用是将文本转换为路径(没有嵌入字体),这在某些情况下可能是可取的

    与Ubuntu13.04(raring)一起发布的matplotlib(v1.2.1)也有这个bug。我不知道在新版本中它是否仍然是一个问题


    另一个解决方法(对我来说似乎很有效)是完全删除
    ../matplotlib/backends/backend\u pdf.py
    中的
    draw\u path\u集合
    函数,你能将其另存为eps或svg,然后转换为pdf吗?有趣的是,将其另存为eps并转换为pdf以后的作品。谢谢!你想把它作为一个答案发布还是我应该这样做?作为记录,我使用MacPorts中的matplotlib 1.1.1并直接保存到pdf很好。