python - 如何使用 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()
解决方案
正如您所要求的,添加该行真的很容易。您正在使用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()
推荐阅读
- vue.js - VueJS 路由器阻止返回某些路由器链接
- c# - 从转换为文本格式的 PDF 中提取美元价格和以逗号作为千位分隔符的数字
- ironpython - Spotfire:如何在 Ironpython 脚本中使用计算值(动态项)?
- git - Notify only one Repository in a multiple SCM setup
- gmail-api - 从电子邮件设置 API 迁移到 GMail API 时更新权限范围
- shell - 搜索模式并在 shell 脚本中替换它
- android - 在 mapbox 上添加动态标记不适用于 SymbolLayer
- r - 从数据表中提取值
- wpf - 如何设置数据网格中垂直设置的列标题的高度(宽度)?
- flutter - 无法选择列表中的第一个元素