首页 > 解决方案 > 如何平滑多边形点之间的线?

问题描述

我想通过我的散点画一条平滑线。椭圆不适合,所以我画了一个多边形,但我无法用多边形获得平滑的线条。我也试过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()

在此处输入图像描述

标签: pythonmatplotlibplotscipydata-visualization

解决方案


本答案中所述,您可以使用闭合样条线插入数据点,为此您可以使用scipy.interpolate.splprepscipy.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()

在此处输入图像描述


推荐阅读