【发布时间】:2015-09-22 03:49:32
【问题描述】:
我有以下图表,我想使用 Python 和 Matplotlib 将其数字化为高质量的出版级图形:
我使用数字化仪程序从 3 个数据集中的一个中获取了一些样本:
x_data = np.array([
1,
1.2371,
1.6809,
2.89151,
5.13304,
9.23238,
])
y_data = np.array([
0.0688824,
0.0490012,
0.0332843,
0.0235889,
0.0222304,
0.0245952,
])
我已经尝试了 3 种不同的方法来通过这些数据点拟合曲线。第一种方法是使用scipy.interpolate import spline通过点绘制样条线
这会导致(将实际数据点绘制为蓝色标记):
这显然不好。
我的第二次尝试是使用scipy.optimize import curve_fit 使用一系列不同阶数的多项式来绘制曲线拟合。即使是四阶多项式,答案也是无用的(低阶的更无用):
最后,我使用scipy.interpolate import interp1d 尝试在数据点之间进行插值。线性插值显然会产生预期的结果,但这条线是笔直的,这个练习的全部目的是获得一条漂亮的平滑曲线:
如果我然后使用三次插值,我会得到一个很糟糕的结果,但是二次插值会产生更好的结果:
但它还没有完全实现,我认为interp1d 不能进行高阶插值。
有没有人有这样做的好方法?也许我最好尝试在 IPE 或其他方式中这样做?
谢谢!
【问题讨论】:
标签: python matplotlib scipy interpolation