为什么我不能通过python中的B-spline来平滑这条曲线?

时间:2018-02-25 01:04:00

标签: python matplotlib scipy interpolation bspline

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

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()

1 个答案:

答案 0 :(得分: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()

这是我们获得的输出: enter image description here