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

2024-10-01 11:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

如果按常规方式绘制,我得到的结果是:

(仅以圆圈为例,我目前拥有的形状充其量可以归类为变形体) enter image description here

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

我查过matplotlib,什么也没找到。(也许我的关键词搞错了…?)在

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

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

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

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

有没有python包/库可以帮助我到达我想要的地方。?或者你能帮助我更好地整理我的数据点吗。?提前谢谢。在

编辑:

我试了一下我画的圆圈上的凹坑,知道为什么线条在某些地方重叠吗。?图片如下: enter image description here

编辑2: 根据@Reblochon Masque在其回答中的评论部分中的建议,通过修改我的部分代码来解决问题。在


Tags: 数据编辑排序顺序matplotlib地方方式绘制
2条回答

如果你不知道你的点是如何设置的(如果你这么做,我建议你按照这个顺序,它会更快),你可以使用scipy中的Convex Hull

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

请注意,此方法将为点创建边界框。在

下面是一个可以做你想做的事情并解决你的问题的例子: more info here

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

points = np.random.rand(30, 2)   # 30 random points in 2-D
hull = ConvexHull(points)

#xs = np.array([point[0] for point in points]) 
#ys = np.array([point[1] for point in points]) 

#xh = np.array([point[0] for point in hull.points]) 
#yh = np.array([point[1] for point in hull.points]) 

plt.plot(points[:,0], points[:,1], 'o')
for simplex in hull.simplices:
    plt.plot(points[simplex, 0], points[simplex, 1], 'k-')


plt.plot(points[hull.vertices,0], points[hull.vertices,1], 'r ', lw=2)
plt.plot(points[hull.vertices[0],0], points[hull.vertices[0],1], 'ro')
plt.show()

凸壳上的点分别绘制并连接成多边形。如果你愿意,你可以进一步操纵它们。在

enter image description here

我认为这可能是一个很好的解决方案(简单而廉价)来实施。如果你的形状是凸的,它会很好地工作。在

如果你的形状不是都是凸的,一种可能成功的方法是根据最近的邻居对点进行排序,然后从这个排序集中绘制一个多边形。在

相关问题 更多 >