lmfit matplot - 在同一时间/图形中拟合来自许多不同文件的许多曲线

时间:2017-02-08 12:13:47

标签: python matplotlib lmfit

我有以下代码,我打算阅读并绘制许多不同文件中的许多曲线。 “阅读和绘图”已经开始运作良好。

问题在于,现在我想在同一个图中为所有曲线拟合。这段代码已经设法适应曲线,但输出全部在一个数组中,我无法绘制它,因为我无法将它分开。

#!/usr/bin/python

import matplotlib.pyplot as plt
from numpy import exp
from lmfit import Model


  def read_files(arquivo):
    x = []
    y = []
    abscurrent = []
    time = []

    data = open(arquivo, 'r')
    headers = data.readlines()[60:]

    for line in headers:
            line = line.strip()
            X, Y, ABS, T = line.split('\t')
            x.append(X)
            y.append(Y)
            abscurrent.append(ABS)
            time.append(T)

            data.close()


    def J(x, j, n):
            return j*((exp((1.6e-19*x)/(n*1.38e-23*333)))-1)

    gmod = Model(J)
    result = gmod.fit(abscurrent, x=x, j=10e-10, n=1)


    return x, y, abscurrent, time    

    print(result.fit_report())

当我要求打印“文件”result.best_fit时,在lmfit中最适合该曲线,我得到12次此结果(我有12条曲线),具有不同的值:

 - Adding parameter "j"
 - Adding parameter "n"
 [  4.30626925e-17   3.25367918e-14   9.60736218e-14   2.20310475e-13
    4.63245638e-13   9.38169958e-13   1.86480698e-12   3.67881758e-12
    7.22634738e-12   1.41635088e-11   2.77290634e-11   5.42490983e-11
    1.06108942e-10   2.07520542e-10   4.05768903e-10   7.93323537e-10
    1.55126521e-09   3.03311029e-09   5.93085363e-09   1.16032067e-08
    2.26884736e-08   4.43641560e-08   8.67362753e-08   1.69617697e-07
    3.31685858e-07   6.48478168e-07]
 - Adding parameter "j"
 - Adding parameter "n"
[  1.43571772e-16   1.00037588e-13   2.92349492e-13   6.62623404e-13

这意味着代码正在正确计算拟合,我只需要以某种方式将此输出分开,以便用它们的曲线绘制每个输出。 []之间的每组值都是我想要以我可以绘制它的方式分开的。

1 个答案:

答案 0 :(得分:0)

我看不到您发布的代码如何产生您的输出。我没有看到print()函数打印出26个值的数组,但可以想象这可能是列表xyabscurrent的长度 - 它是不是print(result.fit_report())的输出,我也看不到结果。

我没有看到任何暗示你有12条独立曲线的东西。

此外,result.best_fit不是文件,而是数组。