Python 在点周围画椭圆

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

我试着用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.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++中的精确和通用实现”()



查尔斯·范·劳恩。“使用椭圆拟合并封闭数据点。” ()