python - 如何在matplotlib中绘制三次样条

标签 python matplotlib

我想使用平滑线连接以下,比如三次样条

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

最后得到像这样的橙色线(这条是使用矢量绘图语言Asymptote创建的)

cubic spline produced in Asymptote

我想知道如何以简单的方式在 matplotlib 中完成它。我已经看过类似的问题,例如Generating smooth line graph using matplotlib , 但直接使用该方法会产生这样的图 enter image description here

这当然不是我想要的。

最佳答案

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

enter image description here

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

这基本上只是对 here 部分中最后一个示例的修改.

关于python - 如何在matplotlib中绘制三次样条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30039260/

相关文章:

python - Django - 403 禁止。 CSRF token 缺失或不正确

python - 适合多个文本框的提交功能

python-2.7 - Python蒙太奇在OpenCV图像上的情节并录制为视频

python - 将 travis-ci 与 wxpython 测试一起使用

python - 将名称放在python条形图中的条形图中

python - matplotlib 图形 Canvas 名称

python - matplotlib 中颜色条刻度标签的旋转

python - 米特代理 : does one have to set proxy server to local?

python - 如何使用 MFDataset 通过 Python NetCDF4 模块读取 OPeNDAP 数据集中的多个文件?

python - 如何将列表的索引与 float 进行比较?