Python Scipy曲线拟合:如何绘制超出数据点的拟合曲线?

Python Scipy曲线拟合:如何绘制超出数据点的拟合曲线?,python,matplotlib,scipy,curve-fitting,Python,Matplotlib,Scipy,Curve Fitting,我有许多数据点,我使用Scipycurve\u fit将曲线拟合到此数据集。现在,我想绘制超出数据点范围的拟合,但我不知道如何进行 下面是一个基于指数拟合的简单示例: import numpy as np from scipy.optimize import curve_fit import matplotlib.pyplot as plt def exponential_fit(x, a, b, c): return a*np.exp(-b*x) + c x = np.array(

我有许多数据点,我使用Scipy
curve\u fit
将曲线拟合到此数据集。现在,我想绘制超出数据点范围的拟合,但我不知道如何进行

下面是一个基于指数拟合的简单示例:

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

def exponential_fit(x, a, b, c):
    return a*np.exp(-b*x) + c

x = np.array([0, 1, 2, 3, 4, 5])
y = np.array([30, 50, 80, 160, 300, 580])
fitting_parameters, covariance = curve_fit(exponential_fit, x, y)
a, b, c = fitting_parameters

plt.plot(x, y, 'o', label='data')
plt.plot(x, exponential_fit(x, *fitting_parameters), '-', label='Fit')

plt.axis([0, 8, 0, 2000])
plt.legend()
plt.show()
这将返回以下绘图:

现在,我如何扩展拟合(橙色)曲线,使其上升到x=8?请注意,我不想创建额外的数据点,我只想扩大拟合曲线的范围


非常感谢

您必须为x定义一个额外的数据范围,以将其扩展到数据点给定的数据范围之外。甚至可以改进表示,并为拟合函数计算更多的x值:

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

def exponential_fit(x, a, b, c):
    return a*np.exp(-b*x) + c

x = np.array([0, 1, 2, 3, 4, 5])
y = np.array([30, 50, 80, 160, 300, 580])
fitting_parameters, covariance = curve_fit(exponential_fit, x, y)
a, b, c = fitting_parameters

x_min = -4  
x_max = 8                                #min/max values for x axis
x_fit = np.linspace(x_min, x_max, 100)   #range of x values used for the fit function
plt.plot(x, y, 'o', label='data')
plt.plot(x_fit, exponential_fit(x_fit, *fitting_parameters), '-', label='Fit')

plt.axis([x_min, x_max, 0, 2000])
plt.legend()
plt.show()

为了增加灵活性,我引入了
x_min,x_max
,因为相同的值用于计算拟合函数使用的x值范围和缩放绘图轴。在“开始”值和“停止”值之间创建一个等距采样,用作计算拟合函数中相应y值的x值

您必须为x定义一个额外的数据范围,以将其扩展到数据点给定的数据范围之外。甚至可以改进表示,并为拟合函数计算更多的x值:

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

def exponential_fit(x, a, b, c):
    return a*np.exp(-b*x) + c

x = np.array([0, 1, 2, 3, 4, 5])
y = np.array([30, 50, 80, 160, 300, 580])
fitting_parameters, covariance = curve_fit(exponential_fit, x, y)
a, b, c = fitting_parameters

x_min = -4  
x_max = 8                                #min/max values for x axis
x_fit = np.linspace(x_min, x_max, 100)   #range of x values used for the fit function
plt.plot(x, y, 'o', label='data')
plt.plot(x_fit, exponential_fit(x_fit, *fitting_parameters), '-', label='Fit')

plt.axis([x_min, x_max, 0, 2000])
plt.legend()
plt.show()

为了增加灵活性,我引入了
x_min,x_max
,因为相同的值用于计算拟合函数使用的x值范围和缩放绘图轴。在“开始”值和“停止”值之间创建一个等距采样,用作计算拟合函数中相应y值的x值

x
范围从0到5。如果希望曲线上升到8(),则需要提供一个范围为11的数组。。。对不起

x_new = np.linspace(0,11)
plt.plot(x_new, exponential_fit(x_new, *fitting_parameters), '-', label='Fit')

x
范围从0到5。如果希望曲线上升到8(),则需要提供一个范围为11的数组。。。对不起

x_new = np.linspace(0,11)
plt.plot(x_new, exponential_fit(x_new, *fitting_parameters), '-', label='Fit')

谢谢!请注意,它应该是
np.linspace(x_min,x_max,100)
编辑它。我想知道,为什么它在我的测试中仍然有效。但是Eclipse从numpy.core.function\u base import linspace将
插入到脚本中。自动化太多了。非常感谢!请注意,它应该是
np.linspace(x_min,x_max,100)
编辑它。我想知道,为什么它在我的测试中仍然有效。但是Eclipse从numpy.core.function\u base import linspace将
插入到脚本中。太多的自动化。