我有一对 y 和 z 位置,我将它们绘制为散点图,如下所示。
查看该图,我们可以看到包含所有点的紧密边界。我的问题是我们如何在 python 中绘制这个边界?理想情况下,我希望有一个代表该区域的填充区域。
我查看了 scipy.spatial.ConvexHull,但它无法捕获较低的曲线。 我的尝试:
plt.scatter(yloc, zloc)
points = np.column_stack((yloc, zloc))
hull = ConvexHull(points)
for simplex in hull.simplices:
plt.plot(points[simplex, 0], points[simplex, 1], 'r-')
如果您想使用数据,可以在这里找到。 Y 位置位于标题“Points:1”下方,Z 位置位于“Points:2”下方。
你尝试过alphashape吗?文档:https://pypi.org/project/alphashape/
import numpy as np
import matplotlib.pyplot as plt
import alphashape
from descartes import PolygonPatch
fig, ax = plt.subplots()
x = np.random.rand(15)
y = np.random.rand(15)
points = np.column_stack((x, y))
ax.scatter(x, y)
alpha = 0.5 # Adjust this value to capture the shape better
alpha_shape = alphashape.alphashape(points, alpha)
ax.add_patch(PolygonPatch(alpha_shape, alpha=alpha))
plt.show()