scipy 三次样条插值可生成直线

oxiaedzo  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(178)

我想得到一条通过整数坐标的特定点的光滑曲线。相反,我得到了点之间的直线段。我尝试了interp1d(x,y,kind='cubic')CubicSpline,没有任何效果。下面是我的代码:

import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import interp1d,CubicSpline
x = np.arange(34)
y = [8,3,0,1,6,2,1,7,6,2,0,2,6,0,1,6,2,2,0,2,7,0,2,8,6,3,6,2,0,1,6,2,7,2]
f = CubicSpline(x, y)
plt.figure(figsize=(10,3))
plt.plot(x, y, 'o', x, f(x))
plt.show()

结果如下:

你能告诉我如何得到平滑的曲线吗?

mm5n2pyu

mm5n2pyu1#

现在你使用原始的x值来绘制曲线,你需要一个包含更多中间x值的新数组,Numpy的np.linspace()在给定的最小值和最大值之间创建了这样一个数组。

import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import interp1d, CubicSpline

y = [8, 3, 0, 1, 6, 2, 1, 7, 6, 2, 0, 2, 6, 0, 1, 6, 2, 2, 0, 2, 7, 0, 2, 8, 6, 3, 6, 2, 0, 1, 6, 2, 7, 2]
x = np.arange(len(y))
f = CubicSpline(x, y)
plt.figure(figsize=(10, 3))
xs = np.linspace(x.min(), x.max(), 500)
plt.plot(x, y, 'o', xs, f(xs))
plt.tight_layout()
plt.show()

相关问题