精华内容
下载资源
问答
  • Python曲线平滑

    千次阅读 2017-08-24 16:37:10
    使用scipy.signal.medfilt函数可以对曲线进行平滑处理,第一个参数是要处理的数据,第二个参数一般是奇数,中间是数据本身,剩余为该点前后数据点,比如下面的3,代表取点本身以及前后各一个点的数据取中位数。...

    使用scipy.signal.medfilt函数可以对曲线进行平滑处理,第一个参数是要处理的数据,第二个参数一般是奇数,中间是数据本身,剩余为该点前后数据点,比如下面的3,代表取点本身以及前后各一个点的数据取中位数。

    plt.plot(raw_data2[m:n,0], yhat, c='b', label='预测值')    # 线性回归预测的结果
    #plt.plot(raw_data2[m:n,0],data3above.repeat(10),c='red',label='真实值上限')                                        # 滤波前上限
    #plt.plot(raw_data2[m:n,0],data3below.repeat(10),c='green',label='真实值下限')                                      # 滤波前下限
    plt.plot(raw_data2[m:n, 0], signal.medfilt(data3above, 3).repeat(10), c='red', label='真实值上限')       # 滤波后上限
    plt.plot(raw_data2[m:n, 0], signal.medfilt(data3below, 3).repeat(10), c='green', label='真实值下限')



    展开全文
  • 主要为大家详细介绍了python用插值法绘制平滑曲线,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Python对折线进行平滑曲线处理

    万次阅读 2018-03-14 20:41:52
    Python对折线进行平滑曲线处理 在用python绘图的时候,经常由于数据的原因导致画出来的图折线分界过于明显,因此需要对原数据绘制的折线进行平滑处理,本文介绍利用插值法进行平滑曲线处理: 实现所需的库 ...

    Python对折线进行平滑曲线处理

    在用python绘图的时候,经常由于数据的原因导致画出来的图折线分界过于明显,因此需要对原数据绘制的折线进行平滑处理,本文介绍利用插值法进行平滑曲线处理:

    实现所需的库

    numpy、scipy、matplotlib

    插值法实现

    • nearest:最邻近插值法
    • zero:阶梯插值
    • slinear:线性插值
    • quadratic、cubic:2、3阶B样条曲线插值
      -

    拟合和插值的区别

    1. 插值:简单来说,插值就是根据原有数据进行填充,最后生成的曲线一定过原有点。

    2. 拟合:拟合是通过原有数据,调整曲线系数,使得曲线与已知点集的差别(最小二乘)最小,最后生成的曲线不一定经过原有点。

    代码实现

    import matplotlib.pyplot as plt
    import numpy as np
    from scipy import interpolate
    
    #设置距离
    x =np.array([0, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 70, 8, 9,10])
    
    #设置相似度
    y =np.array([0.8579087793827057, 0.8079087793827057, 0.7679087793827057, 0.679087793827057,
        0.5579087793827057, 0.4579087793827057, 0.3079087793827057, 0.3009087793827057,
        0.2579087793827057, 0.2009087793827057, 0.1999087793827057, 0.1579087793827057,
        0.0099087793827057, 0.0079087793827057, 0.0069087793827057, 0.0019087793827057,
        0.0000087793827057])
    
    #插值法之后的x轴值,表示从0到10间距为0.5的200个数
    xnew =np.arange(0,10,0.1)
    
    #实现函数
    func = interpolate.interp1d(x,y,kind='cubic')
    
    #利用xnew和func函数生成ynew,xnew数量等于ynew数量
    ynew = func(xnew)
    
    # 原始折线
    plt.plot(x, y, "r", linewidth=1)
    
    #平滑处理后曲线
    plt.plot(xnew,ynew)
    #设置x,y轴代表意思
    plt.xlabel("The distance between POI  and user(km)")
    plt.ylabel("probability")
    #设置标题
    plt.title("The content similarity of different distance")
    #设置x,y轴的坐标范围
    plt.xlim(0,10,8)
    plt.ylim(0,1)
    
    plt.show()

    平滑曲线
    绘制后的曲线,红色是未进行平滑处理的折线,蓝色是进行平滑处理之后的曲线

    注意事项

    1. x, y为原来的数据(少量)
    2. xnew为一个数组,条件:x⊆⊆xnew
      如:x的最小值为-2.931,最大值为10.312;则xnew的左边界要小于-2.931,右边界要大于10.312。当然也最好注意一下间距,最好小于x中的精度
    3. func为函数,里面的参数x、y、kind,x,y就是原数据的x,y,kind为需要指定的方法
    4. ynew需要通过xnew数组和func函数来生成,理论上xnew数组内的值越多,生成的曲线越平滑
    展开全文
  • Python 生成曲线进行快速平滑处理

    万次阅读 多人点赞 2019-09-03 23:20:46
    python函数: https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.savgol_filter.html Savitzky-Golay 滤波器 Savitzky-Golay平滑滤波是光谱预处理中常用滤波方法,它的核心思想是对一定长度...

    前言

    在编写测试程序的时候,由于数据帧数多的原因,导致生成的曲线图比较难看,如下图:
    在这里插入图片描述
    由于高频某些点的波动导致高频曲线非常难看,因此需要对曲线做平滑处理,让曲线过渡更平滑。对曲线进行平滑处理,这里推荐使用Savitzky-Golay 滤波器,可以在scipy库里直接调用,不需要再定义函数。

    Savitzky-Golay 滤波器

    关于Savitzky-Golay 滤波器,可以在scipy里看到关于这个函数的定义:
    https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.savgol_filter.html

    Savitzky-Golay平滑滤波是光谱预处理中常用滤波方法,它的核心思想是对一定长度窗口内的数据点进行k阶多项式拟合,从而得到拟合后的结果。对它进行离散化处理后后,S-G 滤波其实是一种移动窗口的加权平均算法,但是其加权系数不是简单的常数窗口,而是通过在滑动窗口内对给定高阶多项式的最小二乘拟合得出。

    Savitzky-Golay平滑滤波被广泛地运用于数据流平滑除噪,是一种在时域内基于局域多项式最小二乘法拟合的滤波方法。这种滤波器最大的特点在于在滤除噪声的同时可以确保信号的形状、宽度不变。

    使用平滑滤波器对信号滤波时,实际上是拟合了信号中的低频成分,而将高频成分平滑出去了。如果噪声在高频端,那么滤波的结果就是去除了噪声,反之,若噪声在低频段,那么滤波的结果就是留下了噪声。

    总之,平滑滤波是光谱分析中常用的预处理方法之一。用Savitzky-Golay方法进行平滑滤波,可以提高光谱的平滑性,并降低噪音的干扰。S-G平滑滤波的效果,随着选取窗宽不同而不同,可以满足多种不同场合的需求。

    代码实现

    python中Savitzky-Golay滤波器调用如下:

    tmp_smooth = scipy.signal.savgol_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)[source]
    Apply a Savitzky-Golay filter to an array.
    This is a 1-d filter. If x has dimension greater than 1, axis determines the axis along which the filter is applied.
    Parameters
    xarray_like
    The data to be filtered. If x is not a single or double precision floating point array, it will be converted to type numpy.float64 before filtering.
    window_length:int
    The length of the filter window (i.e. the number of coefficients). window_length must be a positive odd integer. If mode is ‘interp’, window_length must be less than or equal to the size of x.
    polyorder:int
    The order of the polynomial used to fit the samples. polyorder must be less than window_length.

    x为原始数据,即我上面代码中的tmp数据。window_length是窗口长度,该值需为正奇整数。polyorder为对窗口内的数据点进行k阶多项式拟合,k的值需要小于window_length。

    现在看一下window_length和k这两个值对曲线的影响。

    首先是window_length对曲线的平滑作用,代码如下:

    tmp_smooth1 = scipy.signal.savgol_filter(tmp,21,3)
    tmp_smooth2 = scipy.signal.savgol_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(num+1)+'拟合曲线-21',color = 'red')
    plt.semilogx(f,tmp_smooth2*0.5,label = 'mic'+str(num+1)+'拟合曲线-53',color = 'green')
    

    生成曲线图如下:
    在这里插入图片描述
    可以看到,window_length的值越小,曲线越贴近真实曲线;window_length值越大,平滑效果越厉害。

    再看k值对曲线的影响,代码如下:

    tmp_smooth1 = scipy.signal.savgol_filter(tmp,53,3)
    tmp_smooth2 = scipy.signal.savgol_filter(tmp,53,9)
    plt.semilogx(f,tmp*0.5,label = 'mic'+str(num+1))
    plt.semilogx(f,tmp_smooth1*0.5,label = 'mic'+str(num+1)+'拟合曲线-P3',color = 'red')
    plt.semilogx(f,tmp_smooth2*0.5,label = 'mic'+str(num+1)+'拟合曲线-P9',color = 'green')
    

    生成曲线图如下:
    在这里插入图片描述
    可以看到,k值越大,曲线越贴近真实曲线;k值越小,曲线平滑越厉害。另外,当k值较大时,受窗口长度限制,拟合会出现问题,高频曲线会变成直线,如下图所示:
    高频变平直
    最终调整阈值得到的拟合效果如下:
    在这里插入图片描述

    相关参考链接:

    Savitzky-Golay平滑滤波的python实现

    展开全文
  • 主要为大家详细介绍了python使用插值法画出平滑曲线,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了python利用插值法对折线进行平滑曲线处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 实现说明见: https://blog.csdn.net/listlike/article/details/107460386
  • 在用python绘图的时候,经常由于数据的原因导致画出来的图折线分界过于明显,因此需要对原数据绘制的折线进行平滑处理,本文介绍利用插值法进行平滑曲线处理: 实现所需的库 numpy、scipy、matplotlib 插值法实现...

    在用python绘图的时候,经常由于数据的原因导致画出来的图折线分界过于明显,因此需要对原数据绘制的折线进行平滑处理,本文介绍利用插值法进行平滑曲线处理:

    实现所需的库

    numpy、scipy、matplotlib

    插值法实现

    nearest:最邻近插值法 zero:阶梯插值 slinear:线性插值 quadratic、cubic:2、3阶B样条曲线插值

    拟合和插值的区别

    插值:简单来说,插值就是根据原有数据进行填充,最后生成的曲线一定过原有点。

    拟合:拟合是通过原有数据,调整曲线系数,使得曲线与已知点集的差别(最小二乘)最小,最后生成的曲线不一定经过原有点。

    代码实现

     

    绘制后的曲线,红色是未进行平滑处理的折线,蓝色是进行平滑处理之后的曲线 

    注意事项

    x, y为原来的数据(少量) xnew为一个数组,条件:x??xnew

    如:x的最小值为-2.931,最大值为10.312;则xnew的左边界要小于-2.931,右边界要大于10.312。当然也最好注意一下间距,最好小于x中的精度 func为函数,里面的参数x、y、kind,x,y就是原数据的x,y,kind为需要指定的方法 ynew需要通过xnew数组和func函数来生成,理论上xnew数组内的值越多,生成的曲线越平滑

    展开全文
  • linewidth=1) #线宽linewidth=1 #平滑后的折线图 plt.plot(x_new,y_smooth,c='red') # 解决中文显示问题 plt.rcParams['font.sans-serif'] = ['SimHei'] #SimHei黑体 plt.rcParams['axes.unicode_minus'] = False ...
  • Python用插值法绘制平滑曲线

    千次阅读 2018-11-30 10:11:59
    平滑处理后: 代码实现如下: # 1. 随机构造数据 import numpy as np x = range(10) y = np.random.randint(10,size=10) # 2. 绘制原图 import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib ...
  • Python从excel读取数据,并使用scipy进行散点的平滑曲线化方法-附件资源
  • from scipy.interpolate import make_interp_spline 改成平滑曲线的问题解决了 接下来开始通过pandas工具包读取excel表格数据绘制平滑曲线和散点图。 import pandas as pd import numpy as np from matplotlib ...
  • from scipy.signal import savgol_filter import matplotlib.pyplot as plt cc = savgol_filter(c, 99, 1) plt.plot(c)plt.plot(cc)plt.show() ...from matplotlib.collections import LineCollection ...
  • Smoothing the loss data using matplotlib ,scipy and numpy in python 绘制平滑曲线The problem:The plot graph from above:Solution:Reference: The problem: import numpy as np import matplotlib.pyplot as ...
  • 示例说明:绘制平滑曲线 代码: import matplotlib.pyplot as plt import numpy as np from scipy.interpolate import spline T = np.array([6, 7, 8, 9, 10, 11, 12]) power = np.array([1.53E+03, 5.92E+...
  • plt.scatter绘制散点图 ...使用scipy库可以进行曲线的smooth import matplotlib.pyplot as plt import numpy as np from scipy.interpolate import spline x = np.array([1, 3, 5, 7, 8]) y = np.array([1, 2, 9,...
  • 一、最简单的模版(曲线、散点)。 import matplotlib.pyplot as plt plt.plot([1,2,3,4]) plt.ylabel('some numbers') plt.show() import matplotlib.pyplot as plt plt.plot([1,2,3,4], [1,4,9,16], 'ro')#x=[1,...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 163
精华内容 65
关键字:

python平滑曲线

python 订阅