I can reproduce this error with the current svn.

I doubt if this is a matplotlib issue, because it works fine if the
number of axes is small.
To me, it seems as some memory error in the ghostscript, but my quick
googling did not show any relevant information.
So, I hope some postscript expert take a look at the issue.

However, note that pcolormesh in backends other than agg is extremely
inefficient, and I strongly discourage its use in other backends.
Your current example could be much efficient if you simply can use
imshow. Do you have to use pcolormesh? Your current example seems to
be easily convertible to imshow, but you original example may not.

In case the use of pcolormesh is not avoidable, I can think of two workarounds.

1) save as pdf first then convert to eps. Saving as pdf will take as
much time as saving as ps.

2) Save as eps but rasterize the pcolormesh plots. This is my choice
and saving time is also not very long. As a matter of fact, whenever
pcolormesh is used, I strongly recommend to consider rasterizing it.

For your current script, you may add something like below at the end
of your for-loop.

  map1.set_zorder(0.5)
  map2.set_zorder(0.5)
  map3.set_zorder(0.5)
  ax1.set_rasterization_zorder(0.6)
  ax2.set_rasterization_zorder(0.6)
  ax3.set_rasterization_zorder(0.6)

This code needs to be inside the for-loop so that all the pcolormesh
plots get rasterized.
Also, note that, in your current script, the third pcolormesh plot is
assigned to "map2", instead of "map3", so you need to fix this first.

Regards,

-JJ


On Thu, Jan 7, 2010 at 11:17 AM, Eric Emsellem <eemse...@eso.org> wrote:
> Hi
>
> I finally managed to write a simplified version of my python script
> which crashes when trying to save the figure as a postscript file. (this
> is related to a previous post). See below. The script is provided, as
> well as the full error message.
>
> Sorry for the long script, but basically I am plotting 3x7 arrays via
> pcolormesh. The script looks pretty dum because it was adapted from a
> more complicated one where the bins/pixels are not exactly squared and
> are rotated. In the version below I have tried to remove the unncessary
> complication. And I get a failure from ghostscript when I try to save it
> as eps. It works when I save it as a png.
>
> Can anyone tell me what's wrong there? Again I am using:
>
> ### On an OpenSuse 11.2, 64b
> xpdf distiller (but I tried others).
> matplotlib 0.99.1.1
> backend WXAgg version 2.8.10.1
> Python 2.6.2 (r262:71600, Oct 24 2009, 03:15:21)
> IPython 0.10 -- An enhanced Interactive Python.
>
>
> THANKS
> Eric
> ====================================================================
>
> ######################################################################
> # Script to run which crashes when saving the figure as an eps file
> ######################################################################
> #!/usr/bin/python
> import numpy as num
> import pylab as pl
>
> def  pos(i,j, w, h) :
>   return [0.05+ j*(w+0.02), 0.99 -  (i+1)*(h+0.023)+0.025, w, h]
>
>
> ## Opening the figure
> ## Figure
> pl.figure(1, figsize=(5*1.2, 7*1.5))
> fig = pl.gcf()
> pl.clf()
>
> ## Size of figure
> figH = fig.get_figheight()
> figW = fig.get_figwidth()
> w = 0.99 / 3. -0.03
> h =  0.99 / 7 - 0.022
>
> ## List of data to plot (I take 7 times the same stuff)
> listgal = ["1","2","3","4","5","6",",7"]
>
> ## Initialisation of start, end and step
> ngal = len(listgal)
> start = [-30.,-30.]
> end = [30.,30.]
> npix = [80,80]
> x = num.linspace(start[0],end[0], npix[0])
> y = num.linspace(start[1],end[1], npix[1])
> step = [x[1]-x[0], y[1]-y[0]]
> X,Y = num.meshgrid(x,y)
>
> ## Initialisation of data
> data = num.random.random((npix[0], npix[1]))
>
> pl.ioff()
> for k in range(ngal) :
>   gal = listgal[k]
>
>   ## Coordinates
>
>   ## Grid for rotation
>   Xp,Yp = X - step[0]/2., Y - step[1]/2.
>   X1,Y1 = X+step[0]/2.,Y+step[1]/2.
>   X2,Y2 = X-step[0]/2.,Y+step[1]/2.
>   X3,Y3 = X-step[0]/2.,Y-step[1]/2.
>   X4,Y4 = X+step[0]/2.,Y-step[1]/2.
>   minXc = num.min(num.concatenate((X1,X2,X3,X4)))
>   maxXc = num.max(num.concatenate((X1,X2,X3,X4)))
>   minYc = num.min(num.concatenate((Y1,Y2,Y3,Y4)))
>   maxYc = num.max(num.concatenate((Y1,Y2,Y3,Y4)))
>   dX = maxXc - minXc
>   dY = maxYc - minYc
>
>   ## Deriving the right aspect ratio etc
>   aspectIma = dX / dY
>   aspectFig = figW / figH
>   aspectWin = w / h
>   if (aspectIma < aspectWin*aspectFig) :
>      maxXc = maxXc * aspectFig * aspectWin / aspectIma
>      minXc = minXc * aspectFig * aspectWin / aspectIma
>   else :
>      maxYc = maxYc * aspectIma / (aspectFig * aspectWin)
>      minYc = minYc * aspectIma / (aspectFig * aspectWin)
>   extentR = minXc, maxXc, minYc, maxYc
>
>   cmap = pl.cm.jet
>   minI, maxI = 0., 1.
>   cmap.set_bad('w',1.0)
>   j = 0
>   ax1 = fig.add_axes(pos(k,j, w, h))
>   map1 = ax1.pcolormesh(Xp,Yp,data,shading='flat',vmin=minI,vmax=maxI,
> cmap=cmap)
>   pl.plot([0.],[0.],'k+', markersize=10, lw=3)
>   xticklabels = pl.getp(pl.gca(), 'xticklabels')
>   pl.setp(xticklabels, fontsize=8)
>   yticklabels = pl.getp(pl.gca(), 'yticklabels')
>   pl.setp(yticklabels, fontsize=8)
>   pl.axis(extentR)
>   j += 1
>
>   ax2 = fig.add_axes(pos(k,j, w, h))
>   map2 = ax2.pcolormesh(Xp,Yp,data,shading='flat',vmin=minI,vmax=maxI,
> cmap=cmap)
>   pl.plot([0.],[0.],'k+', markersize=10, lw=3)
>   pl.axis(extentR)
>   ax2.set_yticks([])
>   xticklabels = pl.getp(pl.gca(), 'xticklabels')
>   pl.setp(xticklabels, fontsize=8)
>   pl.text(0.02,0.96, "%4.0f/%4.0f"%(minI,maxI),
> verticalalignment='top',rotation='vertical',transform = ax2.transAxes,
> fontsize=8)
>   j += 1
>
>   ax3 = fig.add_axes(pos(k,j, w, h))
>   map2 = ax3.pcolormesh(Xp,Yp,data,shading='flat',vmin=0.,vmax=1.,
> cmap=cmap)
>   pl.plot([0.],[0.],'k+', markersize=10, lw=3)
>   pl.axis(extentR)
>   ax3.set_yticks([])
>   xticklabels = pl.getp(pl.gca(), 'xticklabels')
>   pl.setp(xticklabels, fontsize=8)
>   pl.text(0.02,0.96, "%4.0f/%4.0f"%(minI,maxI),
> verticalalignment='top',rotation='vertical',transform = ax3.transAxes,
> fontsize=8)
>   j += 1
>   pl.text(0.92,0.5, gal,
> rotation='vertical',verticalalignment='center',transform = ax3.transAxes)
>
>   k += 1
>
> pl.ion()
> pl.show()
>
> #######################################################################
> ## ERROR MESSAGE WHEN DOING:
> ## savefig("tmp.eps")
> ########################################################################
> savefig("toto.eps")
> Error: /limitcheck in --def--
> Operand stack:
>   pa_c2c   --nostringval--
> Execution stack:
>   %interp_exit   .runexec2   --nostringval--   --nostringval--
> --nostringval--   2   %stopped_push   --nostringval--   --nostringval--
>  --nostringval--   false   1   %stopped_push   1878   1   3
> %oparray_pop   1877   1   3   %oparray_pop   1861   1   3   %oparray_pop
>  1755   1   3   %oparray_pop   --nostringval--   %errorexec_pop
> .runexec2   --nostringval--   --nostringval--   --nostringval--   2
> %stopped_push   --nostringval--
>
> Dictionary stack:
>
>   --dict:1171/3371(ro)(G)--   --dict:1/20(G)--   --dict:74/200(L)--
> --dict:5/6(ro)(L)--   --dict:179/300(L)--   --dict:44/200(L)--
> --dict:65534/65534(L)--
>
> Current allocation mode is local
>
> Last OS error: 2
>
> Current file position is 14229051
>
> GPL Ghostscript 8.64: Unrecoverable error, exit code 1
>
> ---------------------------------------------------------------------------
>
> RuntimeError                              Traceback (most recent call
> last)
>
> /science/ATLAS3D/python/Analysis/Try.py in <module>()
> ----> 1
>      2
>      3
>      4
>      5
>
> /usr/lib64/python2.6/site-packages/matplotlib/pyplot.pyc in
> savefig(*args, **kwargs)
>    354 def savefig(*args, **kwargs):
>
>    355     fig = gcf()
>
> --> 356     return fig.savefig(*args, **kwargs)
>
>    357 if Figure.savefig.__doc__ is not None:
>
>    358     savefig.__doc__ = dedent(Figure.savefig.__doc__)
>
>
> /usr/lib64/python2.6/site-packages/matplotlib/figure.pyc in
> savefig(self, *args, **kwargs)
>   1030                 patch.set_alpha(0.0)
>
>   1031
>
> -> 1032         self.canvas.print_figure(*args, **kwargs)
>
>   1033
>
>   1034         if transparent:
>
>
> /usr/lib64/python2.6/site-packages/matplotlib/backends/backend_wxagg.pyc
> in print_figure(self, filename, *args, **kwargs)
>     98     def print_figure(self, filename, *args, **kwargs):
>
>     99         # Use pure Agg renderer to draw
>
>
> --> 100         FigureCanvasAgg.print_figure(self, filename, *args,
> **kwargs)
>    101         # Restore the current view; this is needed because the
>
>
>    102         # artist contains methods rely on particular attributes
>
>
> /usr/lib64/python2.6/site-packages/matplotlib/backend_bases.pyc in
> print_figure(self, filename, dpi, facecolor, edgecolor, orientation,
> format, **kwargs)
>
>   1474                 orientation=orientation,
>
>   1475                 bbox_inches_restore=_bbox_inches_restore,
>
> -> 1476                 **kwargs)
>
>   1477         finally:
>
>   1478             if bbox_inches and restore_bbox:
>
>
> /usr/lib64/python2.6/site-packages/matplotlib/backend_bases.pyc in
> print_eps(self, *args, **kwargs)
>   1327         from backends.backend_ps import FigureCanvasPS # lazy
> import
>   1328         ps = self.switch_backends(FigureCanvasPS)
>
> -> 1329         return ps.print_eps(*args, **kwargs)
>
>   1330
>
>   1331     def print_pdf(self, *args, **kwargs):
>
>
> /usr/lib64/python2.6/site-packages/matplotlib/backends/backend_ps.pyc in
> print_eps(self, outfile, *args, **kwargs)
>    853
>
>    854     def print_eps(self, outfile, *args, **kwargs):
>
> --> 855         return self._print_ps(outfile, 'eps', *args, **kwargs)
>
>    856
>
>    857
>
>
> /usr/lib64/python2.6/site-packages/matplotlib/backends/backend_ps.pyc in
> _print_ps(self, outfile, format, *args, **kwargs)
>    882             self._print_figure_tex(outfile, format, imagedpi,
> facecolor, edgecolor,
>    883                                    orientation, isLandscape,
> papertype,
> --> 884                                    **kwargs)
>
>    885         else:
>
>    886             self._print_figure(outfile, format, imagedpi,
> facecolor, edgecolor,
>
> /usr/lib64/python2.6/site-packages/matplotlib/backends/backend_ps.pyc in
> _print_figure_tex(self, outfile, format, dpi, facecolor, edgecolor,
> orientation, isLandscape, papertype, **kwargs)
>
>   1188             gs_distill(tmpfile, isEPSF, ptype=papertype,
> bbox=bbox)
>   1189         elif rcParams['ps.usedistiller'] == 'xpdf':
>
> -> 1190             xpdf_distill(tmpfile, isEPSF, ptype=papertype,
> bbox=bbox)
>   1191         elif rcParams['text.usetex']:
>
>   1192             if False: pass # for debugging
>
>
> /usr/lib64/python2.6/site-packages/matplotlib/backends/backend_ps.pyc in
> xpdf_distill(tmpfile, eps, ptype, bbox)
>   1345     fh = file(outfile)
>   1346     if exit_status: raise RuntimeError('ps2pdf was not able to
> process your \
> -> 1347 image.\n\Here is the report generated by ghostscript:\n\n' +
> fh.read())
>   1348     else: verbose.report(fh.read(), 'debug')
>   1349     fh.close()
>
> RuntimeError: ps2pdf was not able to process your image.
> \Here is the report generated by ghostscript:
>
>
> ------------------------------------------------------------------------------
> This SF.Net email is sponsored by the Verizon Developer Community
> Take advantage of Verizon's best-in-class app development support
> A streamlined, 14 day to market process makes app distribution fast and easy
> Join now and get one step closer to millions of Verizon customers
> http://p.sf.net/sfu/verizon-dev2dev
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>

------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to