在matplotlib中绘制一组给定点以形成闭合曲线

Ash*_*rma 3 python plot matplotlib

我有闭合曲线的点的坐标(吨),以x递增的顺序排序。

当以常规方式绘制时,我得到的结果是:

(仅作为示例,我最多可以将圆形归类为变形虫) 在此处输入图片说明

但是我正在寻找的结果是这样的: 在此处输入图片说明

我已经通过matplotlib查看,但找不到任何东西。(也许我的关键字输入有误...?)

我尝试通过以下方式重新格式化数据:

  1. 随机选择一个点,找到其最近的邻居,然后再找到下一个最近的邻居,依此类推。。它在有时数据不太一致的边缘失效(最近的邻居可能在曲线的另一侧)。

  2. 为了解决不一致的数据,我尝试检查两个点之间的坡度(被认为是最近的邻居)是否与先前连接的坡度匹配-失败,原因是我找不到。(在我放弃之前花了很多时间)

  3. 选取x_minimum和x_maximum(以及相应的y坐标)并绘制一条假想的线,并在该线的任一侧对点进行排序。-当您的曲线看起来像香蕉时失败。

是否有python软件包/库可以帮助我到达所需的位置?还是可以帮助我提出一些想法,以便更好地对我的数据点进行排序?提前致谢。

编辑:

在我的圆上尝试过ConcaveHull,知道为什么这些线在某些地方重叠吗?这是图片: 在此处输入图片说明

EDIT2: 通过更改@Reblochon Masque在其答案的注释部分中建议的部分代码,解决了该问题。

arm*_*ita 5

如果您不知道如何设置点(如果我建议您遵循该顺序,则速度会更快),可以从scipy 使用凸包

import matplotlib.pyplot as plt
from scipy.spatial import ConvexHull

# RANDOM DATA
x = np.random.normal(0,1,100)
y = np.random.normal(0,1,100)
xy = np.hstack((x[:,np.newaxis],y[:,np.newaxis]))

# PERFORM CONVEX HULL
hull = ConvexHull(xy)

# PLOT THE RESULTS
plt.scatter(x,y)
plt.plot(x[hull.vertices], y[hull.vertices])
plt.show()
Run Code Online (Sandbox Code Playgroud)

,在上面的示例中结果是这样的:

情节中的凸包

注意,此方法将为您的点创建一个边界框。