我有(大量)闭合曲线点的坐标按 x 递增顺序排序。
当以常规方式绘制时,我得到的结果是这样的:
我已经查看了 matplotlib,但找不到任何东西。 (也许我的关键字有误...?)
我尝试通过以下方式重新格式化数据:
随机选取一个点,找到它最近的邻居,然后找到下一个最近的邻居,依此类推。 它在边缘失败,有时数据不太一致(最近的邻居可能在曲线的另一侧)。
为了解决不一致的数据,我尝试检查两点(被视为最近邻)之间的斜率是否与之前连接的斜率匹配 - 失败,原因我找不到。 (在我放弃之前花了相当多的时间)
选择 x_minimum 和 x_maximum(以及相应的 y 坐标)并绘制一条假想线,并对线两侧的点进行排序。 - 当曲线看起来像香蕉时失败。
是否有 python 包/库可以帮助我到达我想要的地方。?或者你能帮我想出更好地排序数据点的想法吗?提前致谢。
编辑:
在我的圆上尝试了 ConcaveHull,知道为什么线条在某些地方重叠。?这是图片:
编辑 2: 按照@Reblochon Masque 在他的回答的评论部分中的建议,通过更改我的部分代码解决了这个问题。
最佳答案
如果你不知道你的积分是如何设置的(如果你知道我建议你按照那个顺序,它会更快)你可以使用 Convex Hull来自 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()
,在上面的例子中结果是这样的:
请注意,此方法将为您的点创建一个边界框。
关于python - 在 matplotlib 中绘制一组给定点以形成闭合曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36763853/