如何在Matplotlib中绘制三次样条

Kev*_*ell 5 python matplotlib

我想points使用平滑线连接以下内容,例如三次样条线

points = [(3.28,0.00),(4.00,0.50),(4.40,1.0),(4.60,1.52),(5.00,2.5),(5.00,3.34),(4.70,3.8)]
points = points + [(4.50,3.96),(4.20,4.0),(3.70,3.90),(3.00,3.5),(2.00,2.9)]
Run Code Online (Sandbox Code Playgroud)

最终得到像这样的橙色线(这是使用矢量绘图语言渐近线创建的)

渐近线中产生的三次样条

我想知道如何在matplotlib中以一种简单的方式进行操作。我已经看过类似的问题,例如,使用matplotlib生成平滑线图,但是直接使用该方法会产生如下图 在此处输入图片说明

这当然不是我想要的。

tom*_*m10 5

您需要采用参数化方法,如下所示:

在此处输入图片说明

import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate

points = [(3.28,0.00),(4.00,0.50),(4.40,1.0),(4.60,1.52),(5.00,2.5),(5.00,3.34),(4.70,3.8)]
points = points + [(4.50,3.96),(4.20,4.0),(3.70,3.90),(3.00,3.5),(2.00,2.9)]
data = np.array(points)

tck,u = interpolate.splprep(data.transpose(), s=0)
unew = np.arange(0, 1.01, 0.01)
out = interpolate.splev(unew, tck)

plt.figure()
plt.plot(out[0], out[1], color='orange')
plt.plot(data[:,0], data[:,1], 'ob')
plt.show()
Run Code Online (Sandbox Code Playgroud)

这基本上只是从此处部分中的最后一个示例重新设计的。