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

标签 python matplotlib plot

我有(大量)闭合曲线点的坐标按 x 递增顺序排序。

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

(仅以圆圈为例,我目前的形状充其量只能归类为变形虫) enter image description here

但是我要找的结果是这样的: enter image description here

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

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

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

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

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

是否有 python 包/库可以帮助我到达我想要的地方。?或者你能帮我想出更好地排序数据点的想法吗?提前致谢。

编辑:

在我的圆上尝试了 ConcaveHull,知道为什么线条在某些地方重叠。?这是图片: enter image description here

编辑 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()

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

Convex hull in a plot

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

关于python - 在 matplotlib 中绘制一组给定点以形成闭合曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36763853/

相关文章:

python - 如何修复我的 Python 程序

Python mock() 不模拟返回值

python - 不准确的袖扣 plotly

java - 如何为域轴和范围轴设置相同的比例 JFreeChart

r - 使用 geom_point 在 R 中绘制人口密度图

python - Azure 函数 blob 存储文件名

python - 如何将清理后的文本数据拆分为训练数据集和测试数据集(随机采样除外)

python - 热图未加载 seaborn 和 pandas 数据框

python - 将 Matplotlib 和 Sympy 的图放在一起

python - Matplotlib:Web 服务器上的交互式绘图