python - 如何平滑多边形点之间的线?
问题描述
我想通过我的散点画一条平滑线。椭圆不适合,所以我画了一个多边形,但我无法用多边形获得平滑的线条。我也试过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()
解决方案
如本答案中所述,您可以使用闭合样条线插入数据点,为此您可以使用scipy.interpolate.splprep
和scipy.interpolate.splev
。
您首先需要将两者的第一个元素附加x
到y
末尾以关闭样条线。
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()
推荐阅读
- vb.net - 打印 Datagridview 值
- gitlab - 无法推送到 Gitlab 注册表 | Quarkus - 吊臂构建
- c# - C# .NET 4.5 异步 ping 响应被丢弃
- hyperledger - 设置 Hyperledger Explorer V1.1.2 时出现 ENOENT 错误
- acumatica - 你能看到什么手机当前连接到 Acumatica
- python - 如何在不丢失记录的情况下使用空列表对熊猫中的列进行 json_normalize
- c# - 如何安全地处理 WaitHandle?
- elasticsearch - 如何访问 logstash 元数据事件的单个字段?
- excel - 使用 VBA 从 Internet 打开 .csv 文件
- excel - 如何将 Chronicles Instant 转换为 Excel 中的日期时间?