代码之家  ›  专栏  ›  技术社区  ›  Beginner

如何绘制均值为0的协方差误差椭圆?

  •  1
  • Beginner  · 技术社区  · 6 年前

    我试图画不确定度椭圆,这是点的椭圆,离平均值有一个标准差。 我正在使用以下代码: https://stackoverflow.com/a/25022642/7448860

    但是,它画的不是椭圆而是一条线。

    我正在绘制2个随机变量(x,y),所以协方差矩阵的大小是2x 2。为了计算协方差矩阵,我使用的是卡尔曼滤波算法,所以我不需要使用np.cov()。

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.patches import Ellipse
    
    def eigsorted(cov):
        vals, vecs = np.linalg.eigh(cov)
        order = vals.argsort()[::-1]
    
        return vals[order], vecs[:,order]
    
    x = [0]
    y = [0]
    cov = [[0.25, 0.5 ], [0.5, 1.]]
    
    nstd = 1
    ax = plt.subplot(111)
    
    vals, vecs = eigsorted(cov)
    
    theta = np.degrees(np.arctan2(*vecs[:,0][::-1]))
    w, h = 2 * nstd * np.sqrt(vals)
    ell = Ellipse(xy=(np.mean(x), np.mean(y)),
                  width=w, height=h,
                  angle=theta, color='black')
    
    ell.set_facecolor('none')
    ax.add_artist(ell)
    plt.scatter(x, y)
    plt.show()
    

    输出: enter image description here

    我怎样才能画出椭圆,偏离平均值一个标准差?

    我试过:

    x = [0,1,0,1]
    y = [0,0,1,1]
    

    但是,它描绘了: enter image description here

    0 回复  |  直到 6 年前