Python 在点周围画椭圆
我试着用matplotlib在图上画一组点周围的椭圆。我想得到这样的东西:Python 在点周围画椭圆,python,matplotlib,geometry,ellipse,Python,Matplotlib,Geometry,Ellipse,我试着用matplotlib在图上画一组点周围的椭圆。我想得到这样的东西: [[-23.88315146 -3.26328266] # first point [-25.94906669 -1.47440904] # second point [-26.52423229 -4.84947907]] # third point 组的数据集(例如红色数据集)可能如下所示: [[-23.88315146 -3.26328266] # first point [-25.9490
[[-23.88315146 -3.26328266] # first point
[-25.94906669 -1.47440904] # second point
[-26.52423229 -4.84947907]] # third point
组的数据集(例如红色数据集)可能如下所示:
[[-23.88315146 -3.26328266] # first point
[-25.94906669 -1.47440904] # second point
[-26.52423229 -4.84947907]] # third point
我可以很容易地在图表上画出点,但是我在画椭圆时遇到了问题
椭圆的直径为2*标准偏差
,其中心的坐标为(x_平均值,y_平均值)
。一个椭圆的宽度等于x标准偏差*2
。其高度等于y标准偏差*2
然而,我不知道如何计算椭圆的角度(你可以在图片上看到椭圆不是完全垂直的)
你知道怎么做吗
注意:
这个问题是LDA问题(线性判别分析)的简化。我试图将问题简化为最基本的表达式。这与数学的关系远大于编程;) 既然你已经有了尺寸,只想找到角度,我会这样做(基于我的直觉): 尝试找到最适合给定点集的线(趋势线),这也称为。有几种方法可以做到这一点,但最小二乘法是一种相对简单的方法(见下文) 找到最佳拟合线后,可以使用坡度作为角度 最小二乘线性回归 最小二乘线性回归法用于找到趋势线的斜率,这正是我们想要的 这是一个 假设您有一个数据集:
data=[(x1,y1),(x2,y2),…]
使用最小二乘法,坡度应为:
#我在你的例子中看到你已经有了x_意思和y_意思
#无需再次计算,跳过以下两行
#并在示例的其余部分使用您的值
avg_x=总和(数据中元素的元素[0])/len(数据)
avg_y=总和(数据中元素的元素[1])/len(数据)
x_diff=[元素[0]-数据中元素的平均值]
y_diff=[元素[1]-数据中元素的平均值]
x_diff_平方=[x_diff中元素的元素**2]
斜率=和(x*y代表x,y在zip中(x_diff,y_diff))/和(x_diff_平方)
一旦你做到了,你就差不多完成了。坡度等于角度的切线slope=tan(角度)
使用python的math
模块angle=math.atan(slope)
这将返回以弧度为单位的角度。如果您想要以度为单位,则必须使用math.degrees(angle)
将此与已有的尺寸和位置相结合,得到一个椭圆;)
这就是我解决这个特殊问题的方法,但可能有一千种不同的方法也能奏效
最终可能会比我的建议更好(更复杂)。这是一个经过充分研究的问题。首先考虑点集的性质 你想随信附上。然后执行文献中描述的计算。 我在下面提供两个来源 “最小的封闭椭圆——C++中的精确和通用实现”()
查尔斯·范·劳恩。“使用椭圆拟合并封闭数据点。” ()