Font issue while trying to save PS/EPS/SVG but not PDF

As suggested by Phil, I'm reposting github issue #2067 on this list.

I use MPL 1.2.1 on Windows with Python 2.7.5. In my matplotlibrc I've
set sans-serif font to "Segoe UI".

Now, if I try to save a plot to PDF, MPL saves it fine, but if I try
PS or EPS or SVG it fails, because of the font set. (If I don't change
the font everything is fine)

Here is PDF info from mutool:

···

============================================================
PDF-1.4
Info object (27 0 R):
<<
  /CreationDate (D:20130528120149+02'00')
  /Producer (matplotlib pdf backend)
  /Creator (matplotlib 1.2.1, http://matplotlib.sf.net)

Pages: 1

Retrieving info from pages 1-1...
Mediaboxes (1):
            1 ( 10 0 R): [ 0 0 576 432 ]

Fonts (1):
            1 ( 10 0 R): Type3 'SegoeUI' (14 0 R)

So I wonder how can MPL output PDF, but can't output PS/EPS, let aside SVG?

And here is full trace from IPython:

KeyError Traceback (most recent call last)
<ipython-input-63-6bec7f50eb05> in <module>()
----> 1 savefig('test.eps')

C:\Python27\lib\site-packages\matplotlib\pyplot.pyc in savefig(*args, **kwargs)
    470 def savefig(*args, **kwargs):
    471 fig = gcf()
--> 472 return fig.savefig(*args, **kwargs)
    473
    474 @docstring.copy_dedent(Figure.ginput)

C:\Python27\lib\site-packages\matplotlib\figure.pyc in savefig(self,
*args, **kwargs)
   1368 kwargs.setdefault('edgecolor',
rcParams['savefig.edgecolor'])
   1369
-> 1370 self.canvas.print_figure(*args, **kwargs)
   1371
   1372 if transparent:

C:\Python27\lib\site-packages\matplotlib\backend_bases.pyc in
print_figure(self, filename, dpi, facecolor, edgecolor, orientation,
format, **kwargs)
   2094 orientation=orientation,
   2095 bbox_inches_restore=_bbox_inches_restore,
-> 2096 **kwargs)
   2097 finally:
   2098 if bbox_inches and restore_bbox:

C:\Python27\lib\site-packages\matplotlib\backend_bases.pyc in
print_eps(self, *args, **kwargs)
   1841 from backends.backend_ps import FigureCanvasPS # lazy import
   1842 ps = self.switch_backends(FigureCanvasPS)
-> 1843 return ps.print_eps(*args, **kwargs)
   1844
   1845 def print_pdf(self, *args, **kwargs):

C:\Python27\lib\site-packages\matplotlib\backends\backend_ps.pyc in
print_eps(self, outfile, *args, **kwargs)
    972
    973 def print_eps(self, outfile, *args, **kwargs):
--> 974 return self._print_ps(outfile, 'eps', *args, **kwargs)
    975
    976

C:\Python27\lib\site-packages\matplotlib\backends\backend_ps.pyc in
_print_ps(self, outfile, format, *args, **kwargs)
   1005 self._print_figure(outfile, format, imagedpi,
facecolor, edgecolor,
   1006 orientation, isLandscape, papertype,
-> 1007 **kwargs)
   1008
   1009 def _print_figure(self, outfile, format, dpi=72,
facecolor='w', edgecolor='w',

C:\Python27\lib\site-packages\matplotlib\backends\backend_ps.pyc in
_print_figure(self, outfile, format, dpi, facecolor, edgecolor,
orientation, isLandscape, papertype, **kwargs)
   1098 bbox_inches_restore=_bbox_inches_restore)
   1099
-> 1100 self.figure.draw(renderer)
   1101
   1102 if dryrun: # return immediately if dryrun (tightbbox=True)

C:\Python27\lib\site-packages\matplotlib\artist.pyc in
draw_wrapper(artist, renderer, *args, **kwargs)
     52 def draw_wrapper(artist, renderer, *args, **kwargs):
     53 before(artist, renderer)
---> 54 draw(artist, renderer, *args, **kwargs)
     55 after(artist, renderer)
     56

C:\Python27\lib\site-packages\matplotlib\figure.pyc in draw(self, renderer)
   1004 dsu.sort(key=itemgetter(0))
   1005 for zorder, a, func, args in dsu:
-> 1006 func(*args)
   1007
   1008 renderer.close_group('figure')

C:\Python27\lib\site-packages\matplotlib\artist.pyc in
draw_wrapper(artist, renderer, *args, **kwargs)
     52 def draw_wrapper(artist, renderer, *args, **kwargs):
     53 before(artist, renderer)
---> 54 draw(artist, renderer, *args, **kwargs)
     55 after(artist, renderer)
     56

C:\Python27\lib\site-packages\matplotlib\axes.pyc in draw(self,
renderer, inframe)
   2084
   2085 for zorder, a in dsu:
-> 2086 a.draw(renderer)
   2087
   2088 renderer.close_group('axes')

C:\Python27\lib\site-packages\matplotlib\artist.pyc in
draw_wrapper(artist, renderer, *args, **kwargs)
     52 def draw_wrapper(artist, renderer, *args, **kwargs):
     53 before(artist, renderer)
---> 54 draw(artist, renderer, *args, **kwargs)
     55 after(artist, renderer)
     56

C:\Python27\lib\site-packages\matplotlib\axis.pyc in draw(self,
renderer, *args, **kwargs)
   1053
   1054 for tick in ticks_to_draw:
-> 1055 tick.draw(renderer)
   1056
   1057 # scale up the axis label box to also find the neighbors, not

C:\Python27\lib\site-packages\matplotlib\artist.pyc in
draw_wrapper(artist, renderer, *args, **kwargs)
     52 def draw_wrapper(artist, renderer, *args, **kwargs):
     53 before(artist, renderer)
---> 54 draw(artist, renderer, *args, **kwargs)
     55 after(artist, renderer)
     56

C:\Python27\lib\site-packages\matplotlib\axis.pyc in draw(self, renderer)
    238
    239 if self.label1On:
--> 240 self.label1.draw(renderer)
    241 if self.label2On:
    242 self.label2.draw(renderer)

C:\Python27\lib\site-packages\matplotlib\artist.pyc in
draw_wrapper(artist, renderer, *args, **kwargs)
     52 def draw_wrapper(artist, renderer, *args, **kwargs):
     53 before(artist, renderer)
---> 54 draw(artist, renderer, *args, **kwargs)
     55 after(artist, renderer)
     56

C:\Python27\lib\site-packages\matplotlib\text.pyc in draw(self, renderer)
    594 renderer.draw_text(gc, x, y, clean_line,
    595 self._fontproperties, angle,
--> 596 ismath=ismath)
    597
    598 gc.restore()

C:\Python27\lib\site-packages\matplotlib\backends\backend_ps.pyc in
draw_text(self, gc, x, y, s, prop, angle, ismath)
    749
    750 self.set_color(*gc.get_rgb())
--> 751 self.set_font(font.get_sfnt()[(1,0,0,6)],
prop.get_size_in_points())
    752
    753 cmap = font.get_charmap()

KeyError: (1, 0, 0, 6)

Which version of Windows are you on? Apparently, the Segoe UI font is different on Windows 7 and 8 and I'd like to download and test with the correct one.

Mike

···

On 05/28/2013 06:12 AM, klo uo wrote:

As suggested by Phil, I'm reposting github issue #2067 on this list.

I use MPL 1.2.1 on Windows with Python 2.7.5. In my matplotlibrc I've
set sans-serif font to "Segoe UI".

Now, if I try to save a plot to PDF, MPL saves it fine, but if I try
PS or EPS or SVG it fails, because of the font set. (If I don't change
the font everything is fine)

Here is PDF info from mutool:

PDF-1.4
Info object (27 0 R):
<<
   /CreationDate (D:20130528120149+02'00')
   /Producer (matplotlib pdf backend)
   /Creator (matplotlib 1.2.1, http://matplotlib.sf.net)
Pages: 1

Retrieving info from pages 1-1...
Mediaboxes (1):
             1 ( 10 0 R): [ 0 0 576 432 ]

Fonts (1):
             1 ( 10 0 R): Type3 'SegoeUI' (14 0 R)

So I wonder how can MPL output PDF, but can't output PS/EPS, let aside SVG?

And here is full trace from IPython:

KeyError Traceback (most recent call last)
<ipython-input-63-6bec7f50eb05> in <module>()
----> 1 savefig('test.eps')

C:\Python27\lib\site-packages\matplotlib\pyplot.pyc in savefig(*args, **kwargs)
     470 def savefig(*args, **kwargs):
     471 fig = gcf()
--> 472 return fig.savefig(*args, **kwargs)
     473
     474 @docstring.copy_dedent(Figure.ginput)

C:\Python27\lib\site-packages\matplotlib\figure.pyc in savefig(self,
*args, **kwargs)
    1368 kwargs.setdefault('edgecolor',
rcParams['savefig.edgecolor'])
    1369
-> 1370 self.canvas.print_figure(*args, **kwargs)
    1371
    1372 if transparent:

C:\Python27\lib\site-packages\matplotlib\backend_bases.pyc in
print_figure(self, filename, dpi, facecolor, edgecolor, orientation,
format, **kwargs)
    2094 orientation=orientation,
    2095 bbox_inches_restore=_bbox_inches_restore,
-> 2096 **kwargs)
    2097 finally:
    2098 if bbox_inches and restore_bbox:

C:\Python27\lib\site-packages\matplotlib\backend_bases.pyc in
print_eps(self, *args, **kwargs)
    1841 from backends.backend_ps import FigureCanvasPS # lazy import
    1842 ps = self.switch_backends(FigureCanvasPS)
-> 1843 return ps.print_eps(*args, **kwargs)
    1844
    1845 def print_pdf(self, *args, **kwargs):

C:\Python27\lib\site-packages\matplotlib\backends\backend_ps.pyc in
print_eps(self, outfile, *args, **kwargs)
     972
     973 def print_eps(self, outfile, *args, **kwargs):
--> 974 return self._print_ps(outfile, 'eps', *args, **kwargs)
     975
     976

C:\Python27\lib\site-packages\matplotlib\backends\backend_ps.pyc in
_print_ps(self, outfile, format, *args, **kwargs)
    1005 self._print_figure(outfile, format, imagedpi,
facecolor, edgecolor,
    1006 orientation, isLandscape, papertype,
-> 1007 **kwargs)
    1008
    1009 def _print_figure(self, outfile, format, dpi=72,
facecolor='w', edgecolor='w',

C:\Python27\lib\site-packages\matplotlib\backends\backend_ps.pyc in
_print_figure(self, outfile, format, dpi, facecolor, edgecolor,
orientation, isLandscape, papertype, **kwargs)
    1098 bbox_inches_restore=_bbox_inches_restore)
    1099
-> 1100 self.figure.draw(renderer)
    1101
    1102 if dryrun: # return immediately if dryrun (tightbbox=True)

C:\Python27\lib\site-packages\matplotlib\artist.pyc in
draw_wrapper(artist, renderer, *args, **kwargs)
      52 def draw_wrapper(artist, renderer, *args, **kwargs):
      53 before(artist, renderer)
---> 54 draw(artist, renderer, *args, **kwargs)
      55 after(artist, renderer)
      56

C:\Python27\lib\site-packages\matplotlib\figure.pyc in draw(self, renderer)
    1004 dsu.sort(key=itemgetter(0))
    1005 for zorder, a, func, args in dsu:
-> 1006 func(*args)
    1007
    1008 renderer.close_group('figure')

C:\Python27\lib\site-packages\matplotlib\artist.pyc in
draw_wrapper(artist, renderer, *args, **kwargs)
      52 def draw_wrapper(artist, renderer, *args, **kwargs):
      53 before(artist, renderer)
---> 54 draw(artist, renderer, *args, **kwargs)
      55 after(artist, renderer)
      56

C:\Python27\lib\site-packages\matplotlib\axes.pyc in draw(self,
renderer, inframe)
    2084
    2085 for zorder, a in dsu:
-> 2086 a.draw(renderer)
    2087
    2088 renderer.close_group('axes')

C:\Python27\lib\site-packages\matplotlib\artist.pyc in
draw_wrapper(artist, renderer, *args, **kwargs)
      52 def draw_wrapper(artist, renderer, *args, **kwargs):
      53 before(artist, renderer)
---> 54 draw(artist, renderer, *args, **kwargs)
      55 after(artist, renderer)
      56

C:\Python27\lib\site-packages\matplotlib\axis.pyc in draw(self,
renderer, *args, **kwargs)
    1053
    1054 for tick in ticks_to_draw:
-> 1055 tick.draw(renderer)
    1056
    1057 # scale up the axis label box to also find the neighbors, not

C:\Python27\lib\site-packages\matplotlib\artist.pyc in
draw_wrapper(artist, renderer, *args, **kwargs)
      52 def draw_wrapper(artist, renderer, *args, **kwargs):
      53 before(artist, renderer)
---> 54 draw(artist, renderer, *args, **kwargs)
      55 after(artist, renderer)
      56

C:\Python27\lib\site-packages\matplotlib\axis.pyc in draw(self, renderer)
     238
     239 if self.label1On:
--> 240 self.label1.draw(renderer)
     241 if self.label2On:
     242 self.label2.draw(renderer)

C:\Python27\lib\site-packages\matplotlib\artist.pyc in
draw_wrapper(artist, renderer, *args, **kwargs)
      52 def draw_wrapper(artist, renderer, *args, **kwargs):
      53 before(artist, renderer)
---> 54 draw(artist, renderer, *args, **kwargs)
      55 after(artist, renderer)
      56

C:\Python27\lib\site-packages\matplotlib\text.pyc in draw(self, renderer)
     594 renderer.draw_text(gc, x, y, clean_line,
     595 self._fontproperties, angle,
--> 596 ismath=ismath)
     597
     598 gc.restore()

C:\Python27\lib\site-packages\matplotlib\backends\backend_ps.pyc in
draw_text(self, gc, x, y, s, prop, angle, ismath)
     749
     750 self.set_color(*gc.get_rgb())
--> 751 self.set_font(font.get_sfnt()[(1,0,0,6)],
prop.get_size_in_points())
     752
     753 cmap = font.get_charmap()

KeyError: (1, 0, 0, 6)

------------------------------------------------------------------------------
Try New Relic Now & We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service
that delivers powerful full stack analytics. Optimize and monitor your
browser, app, & servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
matplotlib-users List Signup and Options