如何使用matplotlib在散点图中创建置信椭圆?
下面的代码在创建散点图之前一直有效。那么,有人熟悉在散点图上放置置信椭圆吗?
import numpy as np
import matplotlib.pyplot as plt
x = [5,7,11,15,16,17,18]
y = [8, 5, 8, 9, 17, 18, 25]
plt.scatter(x,y)
plt.show()
以下是SAS置信椭圆的参考。
http://support.sas.com/documentation/cdl/en/grstatproc/62603/HTML/default/viewer.htm#a003160800.htm
SAS中的代码如下所示:
proc sgscatter data=sashelp.iris(where=(species="Versicolor"));
title "Versicolor Length and Width";
compare y=(sepalwidth petalwidth)
x=(sepallength petallength)
/ reg ellipse=(type=mean) spacing=4;
run;
4条答案
按热度按时间z0qdvdin1#
下面的代码绘制一个、两个和三个标准差大小的椭圆:
6qftjkof2#
在尝试接受的答案后,我发现它在计算theta时没有正确选择象限,因为它依赖于
np.arccos
:看一下'possible duplicate'和Joe Kington's solution on github,我将他的代码简化为:
8iwquhpp3#
对应的宽度(较大特征值)和高度应为:
由于我们需要找到最大特征值对应的特征向量,由于根据规范https://numpy.org/doc/stable/reference/generated/numpy.linalg.eig.html和
v[:,i]
“特征值不一定是有序的”,eigenvalue lambda_[i]
对应的特征向量为eigenvalue lambda_[i]
;我们应该通过np.argmax(abs(lambda_))
找到本征向量的正确列。ej83mcc04#
一旦协方差矩阵有了特征分解,就不需要显式计算Angular :旋转部分已经为您免费编码了这些信息:
可通过在平移前应用缩放来扩展椭圆: