You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用scipy.curve_fit拟合数据时绘图出现多条重叠线的问题求助

解决scipy curve_fit绘图出现多条重叠线的问题

嘿,我一眼就看出问题啦!你遇到的“多条重叠线”其实不是真的有多个拟合结果,而是你的预测数据(pred_data)是无序的,matplotlib在绘图时会严格按照你给的原始数据顺序连接点,导致折线来回跳跃,看起来就像好几条线叠在一起了。

问题根源

你的pred_data列表是随机顺序的(比如开头是3.0、1.0、1.0,后面又出现9.0、3.0),当你调用plt.plot(pred_data, yaj)时,matplotlib会从第一个点(3.0, 对应yaj值)直接连到第二个点(1.0, 对应yaj值),再连到第三个点(1.0, ...),这种无序的连接就造成了视觉上的“重叠线”效果。

解决方案:先对数据按x轴排序

只需要在绘图前,把pred_data、actu_data和拟合后的yaj按照pred_data的数值从小到大排序,再用排序后的数据绘图就行。

修改后的完整代码如下:

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

def func(x, a, b, c):
    return a * x** b + c

# 原始数据
pred_data = [3.0,1.0,1.0,7.0,6.0,1.0,7.0,4.0,9.0,3.0,5.0,5.0,2.0,6.0,8.0]
actu_data =[ 3.84,1.55,1.15,7.56,6.64,1.09,7.12,4.17,9.45,3.12,5.37,5.65,1.92,6.27,7.63]

# 拟合参数
popt, pcov = curve_fit(func, pred_data, actu_data)
yaj = func(pred_data, popt[0], popt[1], popt[2])

# 关键步骤:按pred_data排序所有数据
# 打包数据并排序
sorted_data = sorted(zip(pred_data, actu_data, yaj), key=lambda x: x[0])
# 拆分排序后的数据
sorted_pred, sorted_actu, sorted_yaj = zip(*sorted_data)

# 绘图
plt.plot(sorted_pred, sorted_actu, 'ro', label='Data')
plt.plot(sorted_pred, sorted_yaj, 'b--', label='Best fit')
plt.legend()
plt.xlabel('Predicted Market Price')
plt.ylabel('Actual Market Price')
plt.show()

效果说明

修改后,拟合线会按照x轴从小到大的顺序平滑连接,不会再出现来回跳跃的情况,你就能看到一条清晰的拟合曲线啦。

内容的提问来源于stack exchange,提问作者user8895497

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:14:01