Use savefig in Python with string and iterative index in the name
20,579
Solution 1
Well, it should be simply this:
savefig(str(a[0]))
This is a toy example. Works for me.
import pylab as pl
import numpy as np
# some data
x = np.arange(10)
pl.figure()
pl.plot(x)
pl.savefig('x=' + str(10) + '.png')
Solution 2
I had the same demand recently and figured out the solution. I modify the given code and correct several explicit errors.
from pylab import *
import matplotlib.pyplot as plt
x = arange(0.12, 60, 0.12).reshape(100, 5)
y = sin(x)
i = 0
while i < 99:
figure()
a = x[i, :] # change each row instead of column
b = y[i, :]
i += 1 # make sure to exit the while loop
flag = 'x=%s' % str(a[0]) # use the first element of list a as the name
plot(a, b, label=flag)
plt.savefig("%s.png" % flag)
Hope it helps.
Solution 3
Since python 3.6
you can use f-strings
to format strings dynamically:
import matplotlib.pyplot as plt
for i in range(99):
plt.figure()
a = x[:, i]
b = y[:, i]
c = a[0]
plt.plot(a, b, label=f'x={c}')
plt.savefig(f'x={c}.png')
Author by
user1872346
Updated on July 09, 2022Comments
-
user1872346 almost 2 years
I need to use the "savefig" in Python to save the plot of each iteration of a while loop, and I want that the name i give to the figure contains a literal part and a numerical part. This one comes out from an array or is the number associated to the index of iteration. I make a simple example:
# index.py from numpy import * from pylab import * from matplotlib import * from matplotlib.pyplot import * import os x=arange(0.12,60,0.12).reshape(100,5) y=sin(x) i=0 while i<99 figure() a=x[:,i] b=y[:,i] c=a[0] plot(x,y,label='%s%d'%('x=',c)) savefig(#???#) #I want the name is: x='a[0]'.png #where 'a[0]' is the value of a[0]
thanks a lot.
-
mmgp over 11 yearsDid you mean
savefig('%s.png' % (str(a[0])))
? -
user1872346 over 11 yearswell,
savefig(str(a[0]))
doesn't produce anything. It is correct the use ofsavefig('%s.png' % (str(a[0])))
, but in this case the name of the images will be "0.12.png", "0.24.png", etc. I want the names are "x=0.12.png" "x=0.24.png", etc. thanks again for your help