user1841859
user1841859

Reputation: 155

Saving multiple plots

i have this code to produce multiple plots from all the text files in a folder. It runs perfectly fine and shows the plots but i cant work out how to then save them all.

import re
import numpy as np
import matplotlib.pyplot as plt
import pylab as pl
import os

rootdir='C:\documents\Neighbors for each search id'

for subdir,dirs,files in os.walk(rootdir):
 for file in files:
  f=open(os.path.join(subdir,file),'r')
  print file
  data=np.loadtxt(f)

  #plot data
  pl.plot(data[:,1], data[:,2], 'gs')

  #Put in the errors
  pl.errorbar(data[:,1], data[:,2], data[:,3], data[:,4], fmt='ro')

  #Dashed lines showing pmRa=0 and pmDec=0
  pl.axvline(0,linestyle='--', color='k')
  pl.axhline(0,linestyle='--', color='k')
  pl.show()

  f.close()

I have previously used

fileName="C:\documents\FirstPlot.png"
plt.savefig(fileName, format="png")

but i think this just saves each graph into one file and overwrites the last one.

Upvotes: 10

Views: 25944

Answers (2)

Martijn Pieters
Martijn Pieters

Reputation: 1124658

All you have to do is provide unique filenames. You could use a counter:

fileNameTemplate = r'C:\documents\Plot{0:02d}.png'

for subdir,dirs,files in os.walk(rootdir):
    for count, file in enumerate(files):
        # Generate a plot in `pl`
        pl.savefig(fileNameTemplate.format(count), format='png')
        pl.clf()  # Clear the figure for the next loop

What I did:

Upvotes: 11

illya
illya

Reputation: 775

You’re doing the right thing to save the plot (just put that code before f.close(), and make sure to use pl.savefig rather than plt.savefig, since you import pyplot as pl). You just have to give each output plot a different filename.

One way to do this is to add a counter variable that gets incremented for each file you go through, and add that to the filename, for instance, doing something like this:

fileName = "C:\documents\Plot-%04d.png" % ifile

Another option is to make a unique output filename based on the filename of the input. You could try something like:

fileName = "C:\documents\Plot-" + "_".join(os.path.split(os.path.join(subdir,file))) + ".png"

That will take the input path, and replace any path separators with _. You can use this as a part of your output filename.

Upvotes: 0

Related Questions