首页 > 解决方案 > 如何使用 scipy.optimize import curve_fit 添加另一条曲线

问题描述

我试图先拟合,然后在同一张图中绘制一条供需曲线。我正在使用 Scipy 来帮助进行曲线拟合。但是,从文档中,我无法理解如何在给定以下代码的情况下添加供应曲线?

from scipy.optimize import curve_fit 


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

xdata = np.linspace(0, 4, 50)
y = func(xdata, 2.5, 1.3, 0.5)
np.random.seed(1729)
y_noise = 0.2 * np.random.normal(size=xdata.size)
ydata = y + y_noise
plt.plot(xdata, ydata, 'b-', label='data')


popt1, pcov = curve_fit(func, xdata, ydata)
popt1

plt.plot(xdata, func(xdata, *popt), 'r-',
         label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))



plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

我的目标是添加黑色曲线,即供给曲线。假设使用上面的代码的需求曲线的反函数,我将如何做到这一点? 在此处输入图像描述

标签: pythonmatplotlib

解决方案


正如您所要求的,添加该行真的很容易。您正在使用matplotlib非常通用的库。你可以看看这里这里。本质上,您需要在拟合结束时添加一行代码。仅使用您的代码,

from scipy.optimize import curve_fit 


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

xdata = np.linspace(0, 4, 50)
y = func(xdata, 2.5, 1.3, 0.5)
np.random.seed(1729)
y_noise = 0.2 * np.random.normal(size=xdata.size)
ydata = y + y_noise
plt.plot(xdata, ydata, 'b-', label='data')


popt1, pcov = curve_fit(func, xdata, ydata)
popt1

plt.plot(xdata, func(xdata, *popt), 'r-',
         label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))


#This is what you need to add
plt.plot(xdata,supplycurve)


plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

推荐阅读