From: Felix P. <fe...@ne...> - 2012-05-28 12:02:17
|
Hi, I just ran into the following Bug: When choosing Qt4Agg as my backend in the matplotlibrc, using TeX will break matplotlib. When choosing backend: MacOSX, everything works fine. The QT4Agg backend also works fine as long as I'm not using TeX. Here is a fairly minimal example: ######### file: killqtmpl.py ######### import pylab as plt import time print "This works" plt.rcdefaults() plt.plot([1,2,3]) plt.show() time.sleep(2) plt.close() print "This won't work with qt4agg" plt.rc('font', family='sans-serif') plt.rc('text', usetex=True) plt.rcParams['text.latex.preamble']=r""" \usepackage[tx]{sfmath} \usepackage{helvet} """ plt.plot([1,2,3]) plt.show() time.sleep(2) plt.close() print "This won't either" plt.rc('font', family='serif') plt.rcParams['text.latex.preamble']=r"\usepackage{mathptmx}" plt.plot([1,2,3]) plt.show() ############################# So, when i run the above script using the MacOSX backend, it displays the same figure (a blue line) three times and outputs: ------- This works This won't work with qt4agg This won't either ------- Now when using Qt4Agg, only the first figure will get displayed and the following error messages appear: ------- In [1]: run killqtmpl.py This works This won't work with qt4agg ERROR: An unexpected error occurred while tokenizing input The following traceback may be corrupted or invalid The error message is: ('EOF in multi-line statement', (17, 0)) ERROR: An unexpected error occurred while tokenizing input The following traceback may be corrupted or invalid The error message is: ('EOF in multi-line statement', (15, 0)) --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.pyc in paintEvent(self, e) 80 81 if self.replot: ---> 82 FigureCanvasAgg.draw(self) 83 self.replot = False 84 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in draw(self) 399 400 self.renderer = self.get_renderer() --> 401 self.figure.draw(self.renderer) 402 403 def get_renderer(self): /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs) 53 def draw_wrapper(artist, renderer, *args, **kwargs): 54 before(artist, renderer) ---> 55 draw(artist, renderer, *args, **kwargs) 56 after(artist, renderer) 57 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/figure.pyc in draw(self, renderer) 882 dsu.sort(key=itemgetter(0)) 883 for zorder, func, args in dsu: --> 884 func(*args) 885 886 renderer.close_group('figure') /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs) 53 def draw_wrapper(artist, renderer, *args, **kwargs): 54 before(artist, renderer) ---> 55 draw(artist, renderer, *args, **kwargs) 56 after(artist, renderer) 57 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axes.pyc in draw(self, renderer, inframe) 1981 1982 for zorder, a in dsu: -> 1983 a.draw(renderer) 1984 1985 renderer.close_group('axes') /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs) 53 def draw_wrapper(artist, renderer, *args, **kwargs): 54 before(artist, renderer) ---> 55 draw(artist, renderer, *args, **kwargs) 56 after(artist, renderer) 57 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axis.pyc in draw(self, renderer, *args, **kwargs) 1035 1036 ticks_to_draw = self._update_ticks(renderer) -> 1037 ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw, renderer) 1038 1039 for tick in ticks_to_draw: /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axis.pyc in _get_tick_bboxes(self, ticks, renderer) 986 for tick in ticks: 987 if tick.label1On and tick.label1.get_visible(): --> 988 extent = tick.label1.get_window_extent(renderer) 989 ticklabelBoxes.append(extent) 990 if tick.label2On and tick.label2.get_visible(): /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/text.pyc in get_window_extent(self, renderer, dpi) 745 raise RuntimeError('Cannot get window extent w/o renderer') 746 --> 747 bbox, info = self._get_layout(self._renderer) 748 x, y = self.get_position() 749 x, y = self.get_transform().transform_point((x, y)) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/text.pyc in _get_layout(self, renderer) 307 w, h, d = get_text_width_height_descent(clean_line, 308 self._fontproperties, --> 309 ismath=ismath) 310 else: 311 w, h, d = 0, 0, 0 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in get_text_width_height_descent(self, s, prop, ismath) 172 fontsize = prop.get_size_in_points() 173 w, h, d = texmanager.get_text_width_height_descent(s, fontsize, --> 174 renderer=self) 175 return w, h, d 176 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/texmanager.pyc in get_text_width_height_descent(self, tex, fontsize, renderer) 606 dvifile = self.make_dvi(tex, fontsize) 607 dvi = dviread.Dvi(dvifile, 72*dpi_fraction) --> 608 page = iter(dvi).next() 609 dvi.close() 610 # A total height (including the descent) needs to be returned. /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in __iter__(self) 63 """ 64 while True: ---> 65 have_page = self._read() 66 if have_page: 67 yield self._output() /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _read(self) 119 while True: 120 byte = ord(self.file.read(1)) --> 121 self._dispatch(byte) 122 # if self.state == _dvistate.inpage: 123 # matplotlib.verbose.report( /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _dispatch(self, byte) 207 c, s, d, a, l = [ self._arg(x) for x in (4, 4, 4, 1, 1) ] 208 n = self.file.read(a+l) --> 209 self._fnt_def(k, c, s, d, a, l, n) 210 elif byte == 247: 211 i, num, den, mag, k = [ self._arg(x) for x in (1, 4, 4, 4, 1) ] /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _fnt_def(self, k, c, s, d, a, l, n) 368 # (d, tfm.design_size, n) 369 --> 370 vf = _vffile(n[-l:]) 371 372 self.fonts[k] = DviFont(scale=s, tfm=tfm, texname=n, vf=vf) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _vffile(texname) 879 880 def _vffile(texname): --> 881 return _fontfile(texname, Vf, '.vf', _vfcache) 882 883 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _fontfile(texname, class_, suffix, cache) 868 filename = find_tex_file(texname + suffix) 869 if filename: --> 870 result = class_(filename) 871 else: 872 result = None /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in __init__(self, filename) 477 self._chars = {} 478 self._packet_ends = None --> 479 self._read() 480 self.close() 481 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _read(self) 119 while True: 120 byte = ord(self.file.read(1)) --> 121 self._dispatch(byte) 122 # if self.state == _dvistate.inpage: 123 # matplotlib.verbose.report( /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _dispatch(self, byte) 506 self._init_packet(pl, cc, tfm) 507 elif 243 <= byte <= 246: --> 508 Dvi._dispatch(self, byte) 509 elif byte == 247: # preamble 510 i, k = self._arg(1), self._arg(1) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _dispatch(self, byte) 207 c, s, d, a, l = [ self._arg(x) for x in (4, 4, 4, 1, 1) ] 208 n = self.file.read(a+l) --> 209 self._fnt_def(k, c, s, d, a, l, n) 210 elif byte == 247: 211 i, num, den, mag, k = [ self._arg(x) for x in (1, 4, 4, 4, 1) ] /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _fnt_def(self, k, *args) 544 545 def _fnt_def(self, k, *args): --> 546 Dvi._fnt_def(self, k, *args) 547 if self._first_font is None: 548 self._first_font = k /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _fnt_def(self, k, c, s, d, a, l, n) 370 vf = _vffile(n[-l:]) 371 --> 372 self.fonts[k] = DviFont(scale=s, tfm=tfm, texname=n, vf=vf) 373 374 def _post(self): /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in __init__(self, scale, tfm, texname, vf) 416 self.size = scale * (72.0 / (72.27 * 2**16)) 417 try: --> 418 nchars = max(tfm.width.iterkeys()) + 1 419 except ValueError: 420 nchars = 0 AttributeError: 'NoneType' object has no attribute 'width' This won't either --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.pyc in paintEvent(self, e) 80 81 if self.replot: ---> 82 FigureCanvasAgg.draw(self) 83 self.replot = False 84 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in draw(self) 399 400 self.renderer = self.get_renderer() --> 401 self.figure.draw(self.renderer) 402 403 def get_renderer(self): /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs) 53 def draw_wrapper(artist, renderer, *args, **kwargs): 54 before(artist, renderer) ---> 55 draw(artist, renderer, *args, **kwargs) 56 after(artist, renderer) 57 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/figure.pyc in draw(self, renderer) 882 dsu.sort(key=itemgetter(0)) 883 for zorder, func, args in dsu: --> 884 func(*args) 885 886 renderer.close_group('figure') /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs) 53 def draw_wrapper(artist, renderer, *args, **kwargs): 54 before(artist, renderer) ---> 55 draw(artist, renderer, *args, **kwargs) 56 after(artist, renderer) 57 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axes.pyc in draw(self, renderer, inframe) 1981 1982 for zorder, a in dsu: -> 1983 a.draw(renderer) 1984 1985 renderer.close_group('axes') /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs) 53 def draw_wrapper(artist, renderer, *args, **kwargs): 54 before(artist, renderer) ---> 55 draw(artist, renderer, *args, **kwargs) 56 after(artist, renderer) 57 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axis.pyc in draw(self, renderer, *args, **kwargs) 1035 1036 ticks_to_draw = self._update_ticks(renderer) -> 1037 ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw, renderer) 1038 1039 for tick in ticks_to_draw: /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axis.pyc in _get_tick_bboxes(self, ticks, renderer) 986 for tick in ticks: 987 if tick.label1On and tick.label1.get_visible(): --> 988 extent = tick.label1.get_window_extent(renderer) 989 ticklabelBoxes.append(extent) 990 if tick.label2On and tick.label2.get_visible(): /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/text.pyc in get_window_extent(self, renderer, dpi) 745 raise RuntimeError('Cannot get window extent w/o renderer') 746 --> 747 bbox, info = self._get_layout(self._renderer) 748 x, y = self.get_position() 749 x, y = self.get_transform().transform_point((x, y)) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/text.pyc in _get_layout(self, renderer) 307 w, h, d = get_text_width_height_descent(clean_line, 308 self._fontproperties, --> 309 ismath=ismath) 310 else: 311 w, h, d = 0, 0, 0 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in get_text_width_height_descent(self, s, prop, ismath) 172 fontsize = prop.get_size_in_points() 173 w, h, d = texmanager.get_text_width_height_descent(s, fontsize, --> 174 renderer=self) 175 return w, h, d 176 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/texmanager.pyc in get_text_width_height_descent(self, tex, fontsize, renderer) 606 dvifile = self.make_dvi(tex, fontsize) 607 dvi = dviread.Dvi(dvifile, 72*dpi_fraction) --> 608 page = iter(dvi).next() 609 dvi.close() 610 # A total height (including the descent) needs to be returned. /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in __iter__(self) 63 """ 64 while True: ---> 65 have_page = self._read() 66 if have_page: 67 yield self._output() /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _read(self) 119 while True: 120 byte = ord(self.file.read(1)) --> 121 self._dispatch(byte) 122 # if self.state == _dvistate.inpage: 123 # matplotlib.verbose.report( /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _dispatch(self, byte) 207 c, s, d, a, l = [ self._arg(x) for x in (4, 4, 4, 1, 1) ] 208 n = self.file.read(a+l) --> 209 self._fnt_def(k, c, s, d, a, l, n) 210 elif byte == 247: 211 i, num, den, mag, k = [ self._arg(x) for x in (1, 4, 4, 4, 1) ] /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _fnt_def(self, k, c, s, d, a, l, n) 361 def _fnt_def(self, k, c, s, d, a, l, n): 362 tfm = _tfmfile(n[-l:]) --> 363 if c != 0 and tfm.checksum != 0 and c != tfm.checksum: 364 raise ValueError, 'tfm checksum mismatch: %s'%n 365 # It seems that the assumption behind the following check is incorrect: AttributeError: 'NoneType' object has no attribute 'checksum' -------- My system: A Macbook Pro with OS X 10.7.4, 4GB ram. I'm using the latest py27-ipython from macports (@12.1). I also installed the qtconsole dependencies and therefore py27-pyqt4 last week using macports. Darwin macbookpro2009.fritz.box 11.4.0 Darwin Kernel Version 11.4.0: Mon Apr 9 19:32:15 PDT 2012; root:xnu-1699.26.8~1/RELEASE_X86_64 x86_64 Matplotlib-Version: 1.1.0 Backend Qt4Agg version 4.9.1 At the moment I can just stick with the MacOSX backend, but hopefully this message will help someone fix the bug. Best regards, Felix Patzelt |