46
votes

In python (for one figure created in a GUI) I was able to save the figure under .jpg and also .pdf by either using:

plt.savefig(filename1 +  '.pdf')

or

plt.savefig(filename1 +  '.jpg')

Using one file I would like to save multiple figures in either .pdf or .jpg (just like its done in math lab). Can anybody please help with this?

3
A little bit of google foo brought me here: pybrary.net/pyPdf - Games Brainiac
Updated link for the comment above (it's now pyPdf2): github.com/mstamy2/PyPDF2 - David Parks

3 Answers

81
votes

Use PdfPages to solve your problem. Pass your figure object to the savefig method.

For example, if you have a whole pile of figure objects open and you want to save them into a multi-page PDF, you might do:

import matplotlib.backends.backend_pdf
pdf = matplotlib.backends.backend_pdf.PdfPages("output.pdf")
for fig in xrange(1, figure().number): ## will open an empty extra figure :(
    pdf.savefig( fig )
pdf.close()
18
votes

Do you mean save multiple figures into one file, or save multiple figures using one script?

Here's how you can save two different figures using one script.

>>> from matplotlib import pyplot as plt
>>> fig1 = plt.figure()
>>> plt.plot(range(10))
[<matplotlib.lines.Line2D object at 0x10261bd90>]
>>> fig2 = plt.figure()
>>> plt.plot(range(10,20))
[<matplotlib.lines.Line2D object at 0x10263b890>]
>>> fig1.savefig('fig1.png')
>>> fig2.savefig('fig2.png')

...which produces these two plots into their own ".png" files: enter image description here

enter image description here

To save them to the same file, use subplots:

>>> from matplotlib import pyplot as plt
>>> fig = plt.figure()
>>> axis1 = fig.add_subplot(211)
>>> axis1.plot(range(10))
>>> axis2 = fig.add_subplot(212)
>>> axis2.plot(range(10,20))
>>> fig.savefig('multipleplots.png')

The above script produces this single ".png" file: enter image description here

0
votes

I struggled with the same issue. I was trying to put 2,000 scatter plots into a single .pdf. I was able to start the procedure, but it aborted after a few hundred. Even when I created six scatter charts into one .pdf, the .pdf file was enormous (like 7mb) for just six .jpg's that were 30kb each. When I opened the .pdf, it appeared that the .pdf was painting every point on the chart (each chart had thousands of points) instead of displaying an image. Some day, I will figure out the correct options, but here is a quick and dirty work-around. I printed the scatter plots to individual .jpg files in a local directory.