python对折线进行平滑,python数据平滑处理方法
主要介绍Python曲线平滑的实现实例,通过实例代码非常详细,对大家的学习或者工作有一定的参考价值。有需要的朋友下面和边肖一起学习。
在编写测试程序时,由于数据帧多,生成的图形很难看,如下图所示:
由于一些高频点的波动,高频曲线非常难看,需要对曲线进行平滑处理,使曲线过渡更加平滑。为了平滑曲线,这里推荐Savitzky-Golay滤波器,可以直接在scipy库中调用,不需要定义函数。
Python中的Savitzky-Golay过滤器调用如下:
tmp _ smooth=scipy . signal . sav gol _ filter(tmp,53,3)
scipy函数解释:
scipy.signal.savgol_filter(x,window_length,polyorder,deriv=0,delta=1.0,axis=-1,mode=interp ,cval=0.0)[来源]
对数组应用Savitzky-Golay过滤器。
这是一维过滤器。如果x的维度大于1,则axis确定应用滤镜所沿的轴。
在对scipy函数的解释中,x是原始数据,也就是上面代码中的tmp数据。Window_length是窗口的长度,需要是奇数。阶是用k阶多项式拟合窗口中的数据点,k的值需要小于window_length。
现在看看window_length和k这两个值对曲线的影响。
(1)首先window_length平滑曲线,代码如下:
tmp _ smooth 1=scipy . signal . sav gol _ filter(tmp,21,3)
tmp _ smooth 2=scipy . signal . sav gol _ filter(tmp,53,3)
plt.semilogx(f,tmp*0.5,label=mic str(num 1))
Plt。semilogx (f,tmp _ smooth1 * 0.5,label= mic str (num1)拟合曲线-21 ,color=red )
Plt。semilogx (f,tmp _ smooth2 * 0.5,label= mic str (num1)拟合曲线-53 ,color=green )
可以看出,window_length的值越小,曲线越接近真实曲线;window_length的值越大,平滑效果越好。
(2)看K值对曲线的影响。代码如下:
tmp _ smooth 1=scipy . signal . sav gol _ filter(tmp,21,3)
tmp _ smooth 2=scipy . signal . sav gol _ filter(tmp,53,3)
plt.semilogx(f,tmp*0.5,label=mic str(num 1))
Plt。semilogx (f,tmp _ smooth1 * 0.5,label= mic str (num1)拟合曲线-21 ,color=red )
Plt。semilogx (f,tmp _ smooth2 * 0.5,label= mic str (num1)拟合曲线-53 ,color=green )
生成的图形如下:
可以看出,k值越大,曲线越接近真实曲线;k值越小,曲线越平滑。另外,当k值较大时,由于窗口长度的限制,拟合会出现问题,高频曲线会变成一条直线,如下图所示:
参考资源
[1] python smoothing _Python为快速平滑生成曲线。
[2]Savitzky-Golay平滑滤波器的python实现
关于Python曲线平滑的这篇文章到此为止。有关Python曲线平滑的更多信息,请搜索流行的IT软件开发工作室以前的文章或继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。