我目前正在做一个项目,我需要创建一个笔画的图像,在给定笔画的一些有序坐标的情况下进行平滑处理。 假设我有一些点
import numpy as np
X = np.array([1, 3, 6, 8, 5])
Y = np.array([1, 8, 4, 4, 1])
plt.plot(X, Y)
但我想要的是制作一个平滑的点集合来绘制这个(这只是一张手绘图,我想你明白了):
我看过this仅适用于函数的问题(一个 x 将只输出一个 y)。但是我需要一个关系样条(不是函数)。 提前谢谢你。
请您参考如下方法:
您可以使用 scipy.interpolate 中的 B 样条(splprep 和 splev):
import numpy as np
from scipy.interpolate import splprep, splev
import matplotlib.pyplot as plt
X = np.array([1, 3, 6, 8, 5])
Y = np.array([1, 8, 4, 4, 1])
pts = np.vstack((X, Y))
# Find the B-spline representation of an N-dimensional curve
tck, u = splprep(pts, s=0.0)
u_new = np.linspace(u.min(), u.max(), 1000)
# Evaluate a B-spline
x_new, y_new = splev(u_new, tck)
plt.plot(x_new, y_new, 'b--')
plt.show()
这会给你类似的东西:
您可以使用 splprep 参数来改变结果。 您可以在此 StackOverflow 中找到更多详细信息 post .
