Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用python绘制符号图中的2西格玛变化_Python_Numpy_Matplotlib_Scipy_Curve Fitting - Fatal编程技术网

如何用python绘制符号图中的2西格玛变化

如何用python绘制符号图中的2西格玛变化,python,numpy,matplotlib,scipy,curve-fitting,Python,Numpy,Matplotlib,Scipy,Curve Fitting,我试图用scipy的曲线拟合函数拟合符号图中的一些样本数据。我的最佳拟合曲线看起来与我下面的代码一致,但我在使用2西格玛曲线时遇到了问题,我想同时显示最佳拟合曲线和灰色填充曲线。我的代码如下所示: import sys import os import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit import scipy.optimize as optimization M =

我试图用scipy的曲线拟合函数拟合符号图中的一些样本数据。我的最佳拟合曲线看起来与我下面的代码一致,但我在使用2西格玛曲线时遇到了问题,我想同时显示最佳拟合曲线和灰色填充曲线。我的代码如下所示:

import sys
import os
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import scipy.optimize as optimization

M = np.array([-2, -1, 0, 1, 2, 3,4])
Y_z = np.array([0.05, 0.2, 3, 8, 50, 344, 2400 ])

# curve fit linear function
def line(x, a, b):
    return a*x+b

popt, pcov = curve_fit(line, M, np.log10(Y_z))     # change here

# plotting
plt.semilogy(M , Y_z, 'o')
plt.semilogy(M, 10**line(M, popt[0], popt[1]), ':', label = 'curve-fit')

# plot 1 sigma -error
y1 = 10**(line(M, popt[0] + pcov[0,0]**0.5, popt[1] - pcov[1,1]**0.5))
y2 = 10**(line(M, popt[0] - pcov[0,0]**0.5, popt[1] + pcov[1,1]**0.5))
plt.semilogy(M, y1, ':')
plt.semilogy(M, y2, ':')
plt.fill_between(M, y1, y2, facecolor="gray", alpha=0.15)

plt.xlabel(r"$\log X$")
plt.ylabel('Y')   
plt.legend()
plt.show()

非常感谢您对方差曲线的帮助原则上,线性拟合根本不需要非线性最小二乘曲线拟合:线性回归应该可以工作

也就是说,为了回答您的问题,您可能会发现lmfit()在这里很有用。它有一个稍微高一点的层次和稍微更Pythonic的曲线拟合方法,并添加了许多功能。其中之一是计算所选sigma值结果的不确定性

用lmfit做你的贴合,看起来

import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize as optimization

import lmfit

M = np.array([-2, -1, 0, 1, 2, 3,4])
Y_z = np.array([0.05, 0.2, 3, 8, 50, 344, 2400 ])

# curve fit linear function
def line(x, a, b):
    return a*x+b

# set up model and create parameters from model function
# note that function argument names are used for parameters
model = lmfit.Model(line)
params = model.make_params(a=1, b=0)

result = model.fit(np.log10(Y_z), params, x=M)

print(result.fit_report())
它将打印一份关于适合度的报告,如下所示:

[[Model]]
    Model(line)
[[Fit Statistics]]
    # fitting method   = leastsq
    # function evals   = 8
    # data points      = 7
    # variables        = 2
    chi-square         = 0.10468256
    reduced chi-square = 0.02093651
    Akaike info crit   = -25.4191304
    Bayesian info crit = -25.5273101
[[Variables]]
    a:  0.77630819 +/- 0.02734470 (3.52%) (init = 1)
    b:  0.22311337 +/- 0.06114460 (27.41%) (init = 0)
[[Correlations]] (unreported correlations are < 0.100)
    C(a, b) = -0.447
然后使用此结果和拟合结果绘制结果(从表格中稍微修改):

这应该会产生一个像这样的情节


希望有帮助。

原则上,线性拟合根本不需要非线性最小二乘曲线拟合:线性回归应该可以工作

也就是说,为了回答您的问题,您可能会发现lmfit()在这里很有用。它有一个稍微高一点的层次和稍微更Pythonic的曲线拟合方法,并添加了许多功能。其中之一是计算所选sigma值结果的不确定性

用lmfit做你的贴合,看起来

import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize as optimization

import lmfit

M = np.array([-2, -1, 0, 1, 2, 3,4])
Y_z = np.array([0.05, 0.2, 3, 8, 50, 344, 2400 ])

# curve fit linear function
def line(x, a, b):
    return a*x+b

# set up model and create parameters from model function
# note that function argument names are used for parameters
model = lmfit.Model(line)
params = model.make_params(a=1, b=0)

result = model.fit(np.log10(Y_z), params, x=M)

print(result.fit_report())
它将打印一份关于适合度的报告,如下所示:

[[Model]]
    Model(line)
[[Fit Statistics]]
    # fitting method   = leastsq
    # function evals   = 8
    # data points      = 7
    # variables        = 2
    chi-square         = 0.10468256
    reduced chi-square = 0.02093651
    Akaike info crit   = -25.4191304
    Bayesian info crit = -25.5273101
[[Variables]]
    a:  0.77630819 +/- 0.02734470 (3.52%) (init = 1)
    b:  0.22311337 +/- 0.06114460 (27.41%) (init = 0)
[[Correlations]] (unreported correlations are < 0.100)
    C(a, b) = -0.447
然后使用此结果和拟合结果绘制结果(从表格中稍微修改):

这应该会产生一个像这样的情节


希望这能有所帮助。

你的问题是什么?我认为我无法绘制2西格玛方差曲线和最佳拟合曲线。曲线与最佳拟合曲线相交,我不希望您编辑您的问题以包括您的具体问题您的问题是什么?我不认为我可以将2西格玛方差曲线与最佳拟合曲线一起绘制。曲线与最佳拟合相交,我不希望您编辑您的问题以包括您的特定问题,这非常有用,特别是了解lmfit函数。这非常有用,特别是了解lmfit函数。