使用poly fit拟合2次及以上多项式的绘图异常问题
问题解决:高次多项式拟合曲线无法正常绘制的修复
错误原因分析
- plt.plot参数传递错误:你写的
plt.plot("", "", x, poly1d_fn(x))参数顺序不符合matplotlib绘图规则,前两个空字符串会被误识别为x、y数据,直接打乱高次拟合的绘图逻辑。 - 原始x数据的局限性:直接用原始离散x点计算拟合值,若x未排序或点数过少,绘制出的“曲线”会是连接原始点的折线,而非平滑的拟合曲线。
修复后的完整代码示例
import numpy as np import matplotlib.pyplot as plt # 替换成你的原始数据 x = np.array([1, 3, 2, 5, 4]) y = np.array([2, 8, 5, 20, 15]) # 设置多项式次数(可修改为3次、4次等) degree = 2 # 执行多项式拟合 coef = np.polyfit(x, y, degree) poly1d_fn = np.poly1d(coef) # 生成密集且排序的x序列,用于绘制平滑曲线 x_smooth = np.linspace(min(x), max(x), 100) # 绘制原始数据点和拟合曲线 plt.scatter(x, y, label='原始数据') plt.plot(x_smooth, poly1d_fn(x_smooth), label=f'{degree}次拟合曲线', color='orange') plt.legend() plt.show() print(poly1d_fn)
关键修复点
- 修正plt.plot调用:去掉多余的空字符串,直接传递
x_smooth(密集x序列)和对应的拟合值poly1d_fn(x_smooth)。 - 使用密集x序列:用
np.linspace在原始x的取值范围内生成100个均匀点,确保拟合曲线平滑连续,不会因原始点的离散性变成折线。
内容的提问来源于stack exchange,提问作者ggggg
相关产品推荐
相关产品推荐

