如何平滑多边形点之间的线?

How to smooth line between polygon points?

我想通过我的散点画一条平滑的线。椭圆不合适,所以我画了一个多边形,但我不能用多边形得到平滑的线条。我也试过 PathPatch,但那样的话这条线就不会通过这些点。有什么办法强制PathPatch过点吗?

我添加了一个示例,希望能说明我正在尝试做的事情。我不要黑线的硬边。

from matplotlib import pyplot as plt
from matplotlib.patches import Ellipse, Polygon

ax = plt.subplot()
ax.set_aspect("equal")
ax.add_artist(Ellipse((0, 0), 10, 5, fill=False, color='green'))

plt.scatter([5, -6, 0, 0], [0, 0, 2.5, -4], marker='X')
ax.add_artist(Polygon([[5, 0], [0, 2.5], [-6, 0], [0, -4]], closed=True, fill=False))

plt.xlim((-6, 6))
plt.ylim((-6, 6))
plt.show()

, you can use a closed spline to interpolate your data points, for this purpose you can use scipy.interpolate.splprep and scipy.interpolate.splev 中所述。
您首先需要将 xy 的第一个元素附加到末尾以关闭样条曲线。

import matplotlib.pyplot as plt
from scipy.interpolate import splprep, splev
import numpy as np


x = [0, 5, 0, -6]
y = [-4, 0, 2, 0]

x.append(x[0])
y.append(y[0])

tck, _ = splprep([x, y], s = 0, per = True)
xx, yy = splev(np.linspace(0, 1, 100), tck, der = 0)


fig, ax = plt.subplots()

ax.scatter(x, y, marker = 'X')
ax.plot(xx, yy, 'green')

plt.show()