Matplotlib绘图迭代绘图功能

时间:2017-03-06 23:33:44

标签: python matplotlib plot

我正在编写一个Python脚本,它将循环遍历目录中的每个ASCII文件,并输出所述文件中包含的数据的单独图。此外,它找到最佳曲线拟合参数并将其输出到一个组合文本文件中。

文本输出完美,但绘图输出没有。在第一次迭代中,它工作正常,但在此之后,它迭代绘图功能。例如,在for filename in os.listdir(directory)的第三次迭代中,绘制三个图例标签,三条拟合曲线和三个每个数据点。这是一个截图:

enter image description here

以下是我正在使用的代码:

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()而不是试图保存图,我会分别查看和退出每个图,每个图都是正确的。

0 个答案:

没有答案