You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Matplotlib中匹配数据点不同的两条曲线并获取匹配后的数据

如何匹配两条多项式拟合曲线并获取对应数据?

嘿,我看你已经用numpy的多项式拟合生成了两条曲线,想要匹配它们并拿到对应的数据对吧?其实核心思路是让两条曲线基于同一个x轴取值集合计算y值,这样自然就能一一对应上了。你代码里已经用了polyline作为共同的x序列,这步很关键,接下来只需要把对应的数据提取出来就行。

步骤1:提取匹配的曲线数据

既然你已经用polyline生成了统一的x轴点,那直接用两个拟合模型分别计算每个x点对应的y值,就能得到匹配好的(x, y模型1, y模型2)数据组了。下面是修改并补全后的代码:

import numpy as np
import matplotlib.pyplot as plt  # 你之前的代码漏了导入matplotlib,记得补上

# ----------------------
# 替换成你的真实原始数据
x = np.random.rand(50)*280  # 示例x数据
y = 0.000001*x**7 - 0.0001*x**6 + 0.005*x**5 - 0.1*x**4 + 1.2*x**3 - 8*x**2 + 20*x + 50  # 示例y数据
x1 = np.random.rand(50)*280  # 示例x1数据
y1 = 0.0000000001*x1**13 - 0.00000001*x1**12 + 0.0000003*x1**11 - 0.000005*x1**10 + 0.00006*x1**9 - 0.0005*x1**8 + 0.003*x1**7 - 0.01*x1**6 + 0.03*x1**5 - 0.06*x1**4 + 0.08*x1**3 - 0.07*x1**2 + 0.03*x1 + 100  # 示例y1数据
# ----------------------

polyline = np.linspace(0, 280, 1000) 
plt.ylim(0,1400) 
plt.xlim(0,300) 

# 多项式拟合
model1 = np.poly1d(np.polyfit(x, y, 7)) 
model2 = np.poly1d(np.polyfit(x1, y1, 13))  # 把变量名改成model2,更清晰

# 计算两条曲线在每个x点的拟合y值
y_fit1 = model1(polyline)
y_fit2 = model2(polyline)

# 组合成匹配好的二维数组,每行是(x, y_fit1, y_fit2)
matched_data = np.column_stack((polyline, y_fit1, y_fit2))

# 可视化(加上图例更清晰)
plt.scatter(x, y, label='原始数据组1', alpha=0.6) 
plt.scatter(x1, y1, label='原始数据组2', alpha=0.6) 
plt.plot(polyline, y_fit1, label='7阶拟合曲线', linewidth=2) 
plt.plot(polyline, y_fit2, label='13阶拟合曲线', linewidth=2) 
plt.legend()
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()

# 打印前5组匹配数据看看效果
print("前5组匹配数据(x, 曲线1拟合值, 曲线2拟合值):")
print(matched_data[:5])

步骤2:保存或使用匹配数据

如果你需要把这些匹配好的数据持久化,可以用numpy的savetxt方法存成CSV文件,方便后续用Excel或其他工具分析:

# 保存为CSV文件
np.savetxt('匹配曲线数据.csv', matched_data, delimiter=',', header='x,y_fit1,y_fit2', comments='')

一些注意点

  • 13阶多项式很容易出现过拟合,如果你的拟合曲线在某些区间出现剧烈波动,建议尝试降低阶数,或者改用带正则化的多项式拟合(比如用sklearn.linear_model.Ridge结合多项式特征)。
  • 确保polyline的取值范围覆盖两组原始数据的x区间,避免外插(即计算超出原始数据范围的x值)带来的不可靠结果。

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

火山引擎 最新活动