scipy curve_fit拟合参数后绘图出现'int对象不可调用'TypeError问题
错误原因
- 核心触发原因是变量与函数命名冲突导致的调用错误:你代码中已经将
temp_range定义为数值类型变量(同时也是自定义函数的参数名),但绘图行中你写了temp_range(...),将数值变量当作函数进行调用,直接触发'int' object is not callable报错。 - 拟合曲线生成逻辑错误:你不需要用
temp_range包裹自定义函数来生成拟合值,只需将拟合得到的参数popt和待计算的温度序列直接传入boatman_temperature_function即可得到对应生长率结果。 - 隐藏问题:你标签格式化字符串只设置了3个占位符,但
popt包含5个拟合参数,直接% tuple(popt)后续会触发参数数量不匹配的报错。 - 额外说明:你代码中
np.sin的输入是乘以np.pi后的弧度值,符合numpy.sin的输入要求,TODO注释的问题无需调整。
修正方案
首先确认你调用curve_fit的入参正确:curve_fit的第二个参数应为自变量(温度列),第三个参数应为因变量(生长率列),如果你现在传的min_temp/temp_range是变量名写错了需要先修正,再执行后续绘图代码:
# 生成14~34范围内的连续温度值,用于绘制平滑拟合曲线 x_fit = np.linspace(14, 34, 100) # 传入拟合参数计算对应生长率 y_fit = boatman_temperature_function(x_fit, *popt) # 绘图 plt.scatter(df['Temperature'], df['Growth rate'], label='原始观测值') plt.plot(x_fit, y_fit, 'g-', label=f'拟合参数: 最大生长率={popt[0]:.3f}, 最低温度={popt[1]:.3f}, 温度范围={popt[2]:.3f}, 偏度={popt[3]:.3f}, 峰度={popt[4]:.3f}') plt.xlabel('Temperature') plt.ylabel('Growth rate') plt.legend() plt.show()
内容的提问来源于stack exchange,提问作者Sam Coleman
相关产品推荐
相关产品推荐

