x值不相等的平滑曲线

时间:2019-03-23 06:58:04

标签: python

对于以下x值不等的曲线,我希望平滑y值。

这如何在Python中完成?

import numpy as np
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import pandas as pd
x = [0,0.1, 0.3, 0.6,0.7, 0.8, 0.9, 1.2, 1.4, 1.6, 1.9, 2.1, 2.4, 2.6, 2.9, 3.1, 3.3, 3.6, 4.0, 4.1, 4.5, 4.7, 5.1, 5.6, 5.9, 6.1]
y = np.sin(x) + np.random.random(len(x)) * 0.4
df = pd.DataFrame(y,index=x)
plt.plot(df, "-o", markersize=2)
plt.grid()
plt.show()

1 个答案:

答案 0 :(得分:2)

您可以采取许多措施来“​​平滑”曲线。一种有效的方法是查看scipy.interpolate库并使用UnivariateSpline function

from scipy.interpolate import UnivariateSpline

x = np.array([0,0.1, 0.3, 0.6,0.7, 0.8, 0.9, 1.2, 1.4, 1.6, 1.9, 2.1, 2.4, 
2.6, 2.9, 3.1, 3.3, 3.6, 4.0, 4.1, 4.5, 4.7, 5.1, 5.6, 5.9, 6.1])
y = np.sin(x) + np.random.random(len(x)) * 0.4

plt.plot(x, y, "-o", markersize=2)

s = UnivariateSpline(x,y)
x_interp = np.linspace(0, 6, 1000)  
plt.plot(x_interp, s(x_interp), 'r-')
plt.xlabel('x')
plt.ylabel('y')

splines_example

UnivariateSpline做什么?

我不是专家,但实际上您是在x中不同点(或结)之间拟合分段多项式(指定度,这里使用默认参数)。内插的自由度随着结数或多项式次数的增加而增加。本质上,您是在最小化插值数据中的错误,但是不想过多地描述数据。

话虽如此,如果您知道信号的预期形式,则最好将正弦曲线拟合到数据中……