From: Alex G. <gs...@cs...> - 2005-12-06 14:33:12
|
Hi, I'm trying to use matplotlib solely for my plotting needs. Problem is, the fonts are embedded in each EPS file, and when I import several plots (I have tens of them...) into a single Latex, the resulting file is HUGE. Any suggestions? Thanks, Alex |
From: Darren D. <dd...@co...> - 2005-12-06 14:48:52
|
On Tuesday 06 December 2005 09:10, Alex Gontmakher wrote: > Hi, > > I'm trying to use matplotlib solely for my plotting needs. > Problem is, the fonts are embedded in each EPS file, and > when I import several plots (I have tens of them...) into a > single Latex, the resulting file is HUGE. > > Any suggestions? There are currently two options: you can either set ps.useafm = True, or you can set text.usetex = True in your rc settings. Since you are importing figures into latex, I suggest the usetex option. That way, your figure fonts can be the same as your text fonts. You'll take a bit of a speed hit with the latter option, but in my opinion, its the only way to go for generating plots for publication. Darren |
From: Christian K. <ck...@ho...> - 2005-12-06 15:03:39
|
Darren Dale wrote: > On Tuesday 06 December 2005 09:10, Alex Gontmakher wrote: > >>Hi, >> >>I'm trying to use matplotlib solely for my plotting needs. >>Problem is, the fonts are embedded in each EPS file, and >>when I import several plots (I have tens of them...) into a >>single Latex, the resulting file is HUGE. >> >>Any suggestions? > > > There are currently two options: you can either set ps.useafm = True, or you > can set text.usetex = True in your rc settings. Since you are importing > figures into latex, I suggest the usetex option. That way, your figure fonts > can be the same as your text fonts. You'll take a bit of a speed hit with the > latter option, but in my opinion, its the only way to go for generating plots > for publication. When using tex for font rendering I noticed that parts of the text are not converted to polygons but embedded as bitmaps. That makes the files big again. Do you now how to avoid that? E.g. using the r'$C_{12}$ will produce two images for the numbers and a polygon for the 'C'. Regards, Christian |
From: Darren D. <dd...@co...> - 2005-12-06 19:29:21
|
On Tuesday 06 December 2005 10:03, Christian Kristukat wrote: > Darren Dale wrote: > > On Tuesday 06 December 2005 09:10, Alex Gontmakher wrote: > >>Hi, > >> > >>I'm trying to use matplotlib solely for my plotting needs. > >>Problem is, the fonts are embedded in each EPS file, and > >>when I import several plots (I have tens of them...) into a > >>single Latex, the resulting file is HUGE. > >> > >>Any suggestions? > > > > There are currently two options: you can either set ps.useafm = True, or > > you can set text.usetex = True in your rc settings. Since you are > > importing figures into latex, I suggest the usetex option. That way, your > > figure fonts can be the same as your text fonts. You'll take a bit of a > > speed hit with the latter option, but in my opinion, its the only way to > > go for generating plots for publication. > > When using tex for font rendering I noticed that parts of the text are not > converted to polygons but embedded as bitmaps. That makes the files big > again. Do you now how to avoid that? E.g. using the r'$C_{12}$ will produce > two images for the numbers and a polygon for the 'C'. I made a wiki entry a while back about how to work around this problem, but it looks like someone deleted it in mid-November, and I dont have a backup copy. My solution requires ghostview and xpdf, which is why we dont include it in mpl by default. You can remove the following block in backend_ps.py, starting around line 1144: command = 'latex -interaction=nonstopmode "%s"' % texfile verbose.report(command, 'debug-annoying') stdin, stdout, stderr = os.popen3(command) verbose.report(stdout.read(), 'debug-annoying') verbose.report(stderr.read(), 'helpful') command = 'dvips -R -T %fin,%fin -o "%s" "%s"' % (pw, ph, psfile, dvifile) verbose.report(command, 'debug-annoying') stdin, stdout, stderr = os.popen3(command) verbose.report(stdout.read(), 'debug-annoying') verbose.report(stderr.read(), 'helpful') os.remove(epsfile) if ext.startswith('.ep'): dpi = rcParams['ps.distiller.res'] if sys.platform == 'win32': command = 'gswin32c -dBATCH -dNOPAUSE -dSAFER -r%d \ -sDEVICE=epswrite -dLanguageLevel=2 -dEPSFitPage \ -sOutputFile="%s" "%s"'% (dpi, epsfile, psfile) else: command = 'gs -dBATCH -dNOPAUSE -dSAFER -r%d \ -sDEVICE=epswrite -dLanguageLevel=2 -dEPSFitPage \ -sOutputFile="%s" "%s"'% (dpi, epsfile, psfile) verbose.report(command, 'debug-annoying') stdin, stdout, stderr = os.popen3(command) verbose.report(stdout.read(), 'debug-annoying') verbose.report(stderr.read(), 'helpful') shutil.move(epsfile, outfile) else: shutil.move(psfile, outfile) and replace it with this: command = 'latex -interaction=nonstopmode "%s"' % texfile verbose.report(command, 'debug-annoying') stdin, stdout, stderr = os.popen3(command) verbose.report(stdout.read(), 'debug-annoying') verbose.report(stderr.read(), 'helpful') command = 'dvips -R -T %fin,%fin -o "%s" "%s"' % (pw, ph, psfile, dvifile) verbose.report(command, 'debug-annoying') stdin, stdout, stderr = os.popen3(command) verbose.report(stdout.read(), 'debug-annoying') verbose.report(stderr.read(), 'helpful') os.remove(epsfile) pdffile = tmpname + '.pdf' if ext.startswith('.ep'): command = 'ps2pdf "%s"'% psfile os.system(command) command = 'pdftops -level2 "%s" "%s"'% (pdffile, psfile) os.system(command) os.remove(pdffile) command = '/usr/local/bin/ps2eps -l "%s"'% psfile stdin, stderr = os.popen4(command) verbose.report(stderr.read(), 'helpful') command = 'epstopdf "%s"'% epsfile os.system(command) shutil.move(epsfile, outfile) shutil.move(pdffile, basename+'.pdf') else: command = 'ps2pdf "%s" "%s"'% (psfile, pdffile) stdin, stderr = os.popen4(command) verbose.report(stderr.read(), 'helpful') os.remove(psfile) command = 'pdftops -paperw %d -paperh %d -level2 "%s" "%s"'% \ (int(pw*72), int(ph*72), pdffile, psfile) os.system(command) shutil.move(psfile, outfile) Darren |
From: Christian K. <ck...@ho...> - 2005-12-07 13:41:11
|
Darren Dale wrote: > On Tuesday 06 December 2005 10:03, Christian Kristukat wrote: > >>Darren Dale wrote: >> >>>On Tuesday 06 December 2005 09:10, Alex Gontmakher wrote: >>> >>>>Hi, >>>> >>>>I'm trying to use matplotlib solely for my plotting needs. >>>>Problem is, the fonts are embedded in each EPS file, and >>>>when I import several plots (I have tens of them...) into a >>>>single Latex, the resulting file is HUGE. >>>> >>>>Any suggestions? >>> >>>There are currently two options: you can either set ps.useafm = True, or >>>you can set text.usetex = True in your rc settings. Since you are >>>importing figures into latex, I suggest the usetex option. That way, your >>>figure fonts can be the same as your text fonts. You'll take a bit of a >>>speed hit with the latter option, but in my opinion, its the only way to >>>go for generating plots for publication. >> >>When using tex for font rendering I noticed that parts of the text are not >>converted to polygons but embedded as bitmaps. That makes the files big >>again. Do you now how to avoid that? E.g. using the r'$C_{12}$ will produce >>two images for the numbers and a polygon for the 'C'. > > > I made a wiki entry a while back about how to work around this problem, but it > looks like someone deleted it in mid-November, and I dont have a backup copy. > My solution requires ghostview and xpdf, which is why we dont include it in > mpl by default. Thanks! Has using pdflatex for tex labels been considered? Or is that too much dependency? It could possibly even be faster. Christian |
From: Darren D. <dd...@co...> - 2005-12-07 14:29:30
|
On Wednesday 07 December 2005 08:41, Christian Kristukat wrote: > Darren Dale wrote: > > On Tuesday 06 December 2005 10:03, Christian Kristukat wrote: > >>Darren Dale wrote: > >>>On Tuesday 06 December 2005 09:10, Alex Gontmakher wrote: > >>>>Hi, > >>>> > >>>>I'm trying to use matplotlib solely for my plotting needs. > >>>>Problem is, the fonts are embedded in each EPS file, and > >>>>when I import several plots (I have tens of them...) into a > >>>>single Latex, the resulting file is HUGE. > >>>> > >>>>Any suggestions? > >>> > >>>There are currently two options: you can either set ps.useafm = True, or > >>>you can set text.usetex = True in your rc settings. Since you are > >>>importing figures into latex, I suggest the usetex option. That way, > >>> your figure fonts can be the same as your text fonts. You'll take a bit > >>> of a speed hit with the latter option, but in my opinion, its the only > >>> way to go for generating plots for publication. > >> > >>When using tex for font rendering I noticed that parts of the text are > >> not converted to polygons but embedded as bitmaps. That makes the files > >> big again. Do you now how to avoid that? E.g. using the r'$C_{12}$ will > >> produce two images for the numbers and a polygon for the 'C'. > > > > I made a wiki entry a while back about how to work around this problem, > > but it looks like someone deleted it in mid-November, and I dont have a > > backup copy. My solution requires ghostview and xpdf, which is why we > > dont include it in mpl by default. > > Thanks! > Has using pdflatex for tex labels been considered? Or is that too much > dependency? It could possibly even be faster. I'm guessing pdflatex is provided by default by every up-to-date latex installation out there. However, mpl uses a latex package called PSFrag to render the text in an intermediate postscript file, which is not compatible with pdflatex. Unfortunately, if you embed that intermediate postscript file in a new document, the text will frequently be upside down, because PSFrag uses some commands that are illegal in embedded documents. So by default, mpl uses ghostscript to "distill" the intermediate postscript file, converting the fonts to outlines and circumventing the problem. The code I posted last time replaces the distilling step with a ridiculous renormalization step (converting the file to pdf using ghostscript, and then converting back to eps using xpdf) which generates a new eps file that can be embedded in another document. This seems to be pretty robust, convoluted though it is. I generated all the figures in my dissertation this way. A side note, if you intend to compile a document with pdflatex, you can convert mpl's eps files with epstopdf, which is included in recent versions of TeTeX. Darren |
From: Christian K. <ck...@ho...> - 2005-12-07 15:51:21
|
Darren Dale wrote: > On Wednesday 07 December 2005 08:41, Christian Kristukat wrote: > >>Darren Dale wrote: >> >>>On Tuesday 06 December 2005 10:03, Christian Kristukat wrote: >>> >>>>Darren Dale wrote: >>>> >>>>>On Tuesday 06 December 2005 09:10, Alex Gontmakher wrote: >>>>> >>>>>>Hi, >>>>>> >>>>>>I'm trying to use matplotlib solely for my plotting needs. >>>>>>Problem is, the fonts are embedded in each EPS file, and >>>>>>when I import several plots (I have tens of them...) into a >>>>>>single Latex, the resulting file is HUGE. >>>>>> >>>>>>Any suggestions? >>>>> >>>>>There are currently two options: you can either set ps.useafm = True, or >>>>>you can set text.usetex = True in your rc settings. Since you are >>>>>importing figures into latex, I suggest the usetex option. That way, >>>>>your figure fonts can be the same as your text fonts. You'll take a bit >>>>>of a speed hit with the latter option, but in my opinion, its the only >>>>>way to go for generating plots for publication. >>>> >>>>When using tex for font rendering I noticed that parts of the text are >>>>not converted to polygons but embedded as bitmaps. That makes the files >>>>big again. Do you now how to avoid that? E.g. using the r'$C_{12}$ will >>>>produce two images for the numbers and a polygon for the 'C'. >>> >>>I made a wiki entry a while back about how to work around this problem, >>>but it looks like someone deleted it in mid-November, and I dont have a >>>backup copy. My solution requires ghostview and xpdf, which is why we >>>dont include it in mpl by default. >> >>Thanks! >>Has using pdflatex for tex labels been considered? Or is that too much >>dependency? It could possibly even be faster. > > > I'm guessing pdflatex is provided by default by every up-to-date latex > installation out there. However, mpl uses a latex package called PSFrag to > render the text in an intermediate postscript file, which is not compatible > with pdflatex. Unfortunately, if you embed that intermediate postscript file > in a new document, the text will frequently be upside down, because PSFrag > uses some commands that are illegal in embedded documents. So by default, mpl > uses ghostscript to "distill" the intermediate postscript file, converting > the fonts to outlines and circumventing the problem. > > The code I posted last time replaces the distilling step with a ridiculous > renormalization step (converting the file to pdf using ghostscript, and then > converting back to eps using xpdf) which generates a new eps file that can be > embedded in another document. This seems to be pretty robust, convoluted > though it is. I generated all the figures in my dissertation this way. I see. Thanks for the explanation. Your code seems to export both an eps and pdf file, right? Anyway, I don't have the program ps2eps on my system so I'll remove that part. > A side note, if you intend to compile a document with pdflatex, you can > convert mpl's eps files with epstopdf, which is included in recent versions > of TeTeX. That's the way I do it, too. But there's always a polygon at the left bottom corner of a letter page which makes the bbox large. It's too annoying to set the bbox by hand so Iusually convert the .eps to .sk with pstoedit, edit it with skencil, print it as eps and convert it to pdf. I'd be happy if some of those steps would vanish in future. Regards, Christian |
From: Darren D. <dd...@co...> - 2005-12-07 16:03:30
|
On Wednesday 07 December 2005 10:51, Christian Kristukat wrote: > I see. Thanks for the explanation. Your code seems to export both an eps > and pdf file, right? Anyway, I don't have the program ps2eps on my system > so I'll remove that part. Dont let that stand in your way: http://www.tm.uka.de/~bless/ps2eps |
From: Christian K. <ck...@ho...> - 2005-12-07 16:17:16
|
Darren Dale wrote: > On Wednesday 07 December 2005 10:51, Christian Kristukat wrote: > >>I see. Thanks for the explanation. Your code seems to export both an eps >>and pdf file, right? Anyway, I don't have the program ps2eps on my system >>so I'll remove that part. > > > Dont let that stand in your way: > http://www.tm.uka.de/~bless/ps2eps You're right. That's worth having. Thank you again for your hints. Christian |