繁体   English   中英

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

[英]Scipy curve_fit: how to plot the fitted curve beyond the data points?

我有许多数据点,并且使用了Scipy curve_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定义一个额外的数据范围,以将其扩展到数据点给定的数据范围之外。 您甚至可以改善表示并为fit函数计算更多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值的范围并缩放图的轴。 numpy.linspace在开始值和停止值之间创建均匀间隔的样本,用作x值以计算fit函数中的相应y值。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM