1

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

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

4

1 回答 1

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-02-25T05:01:19.900 回答