【问题标题】:Why I can't smooth this curve by B-spline in python?为什么我不能在 python 中通过 B 样条平滑这条曲线?
【发布时间】:2018-08-04 18:32:27
【问题描述】:

我检查了几种不同的方法,但为什么我的曲线不能像其他人那样平滑?这是我的代码和图片。

from scipy.interpolate import splrep, splev
import matplotlib.pyplot as plt

list_x = [296, 297, 425, 460, 510, 532, 597, 601, 602, 611]
list_y = [2, 12, 67, 15, 21, 2037, 1995, 9, 39, 3]
bspl = splrep(list_x,list_y)
bspl_y = splev(list_x,bspl)
plt.figure()
plt.plot(list_x, bspl_y)   
plt.xticks(fontsize = 10)
plt.yticks(fontsize = 10)
plt.show()

【问题讨论】:

    标签: python matplotlib scipy interpolation bspline


    【解决方案1】:

    您看不到插值,因为您为 matplotlib 提供了与您用于原始数据表示的插值曲线相同的 10 个数据点。我们必须创建一个更高分辨率的曲线:

    from scipy.interpolate import splrep, splev
    import matplotlib.pyplot as plt
    import numpy as np
    
    list_x = [296, 297, 425, 460, 510,  521,  597, 601, 602, 611]
    list_y = [2,   12,   67, 15,  21,  2037, 1995, 9, 39, 3]
    bspl = splrep(list_x,list_y, s=0)
    #values for the x axis
    x_smooth = np.linspace(min(list_x), max(list_x), 1000)
    #get y values from interpolated curve
    bspl_y = splev(x_smooth, bspl)
    plt.figure()
    #original data points
    plt.plot(list_x, list_y, 'rx-')
    #and interpolated curve
    plt.plot(x_smooth, bspl_y, 'b')   
    plt.xticks(fontsize = 10)
    plt.yticks(fontsize = 10)
    plt.show()
    

    这是我们得到的输出:

    【讨论】:

      猜你喜欢
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多