我正在编写一个Python脚本,它将循环遍历目录中的每个ASCII文件,并输出所述文件中包含的数据的单独图。此外,它找到最佳曲线拟合参数并将其输出到一个组合文本文件中。
文本输出完美,但绘图输出没有。在第一次迭代中,它工作正常,但在此之后,它迭代绘图功能。例如,在for filename in os.listdir(directory)
的第三次迭代中,绘制三个图例标签,三条拟合曲线和三个每个数据点。这是一个截图:
以下是我正在使用的代码:
for filename in os.listdir(directory):
if filename.endswith((".lc", ".lc1")):
wf = directory + "/" + filename
try:
# get the data
time, flux = getData(wf, nheader)
# fit the data
popt_sine, err_sine = sineFit(time, flux)
popt_exp, err_exp = expFit(time, flux)
# plot/save the data
plotData(filename, time, flux, popt_sine, popt_exp)
# output the data
output = outputData(popt_sine, err_sine, popt_exp, err_exp)
print(output)
except StopIteration:
raise IOError("End of File Error")
我将函数plotData定义为:
def plotData(filename, time, flux, popt_sine, popt_exp):
t = np.linspace(time[0], time[len(time)-1], 10000)
# Sine plot
A = popt_sine[0]
B = popt_sine[1]
C = popt_sine[2]
D = popt_sine[3]
plt.plot(t, sine(t, A, B, C, D), "r", label="Sine Fit")
# Exponential plot
E = popt_exp[0]
F = popt_exp[1]
G = popt_exp[2]
H = popt_exp[3]
#plt.plot(t, exponential(t, E, F, G, H), label='Exponential Fit')
# Raw plot
plt.plot(time, flux, "ko", label = "Data")
# Plot config.
plt.xlabel("Time (sec)")
plt.ylabel("Flux")
plt.title("Mean Normalized Flux vs. Time (" + filename + ")")
plt.legend(loc='best')
# save plot
if filename.endswith(".lc"):
plt.savefig(filename[:-3] + ".jpg")
elif filename.endswith(".lc1"):
plt.savefig(filename[:-4] + ".jpg")
else:
raise ValueError("Incorrect input file type")
#plt.show()
我注意到一件有趣的事情:如果我做plt.show()
而不是试图保存图,我会分别查看和退出每个图,每个图都是正确的。