Creating a Confidence Ellipse in a scatterplot using matplotlib

matplotlib, numpy, python, scipy

Solution

The following code draws a one, two, and three standard deviation sized ellipses:

x = [5,7,11,15,16,17,18]
y = [8, 5, 8, 9, 17, 18, 25]
cov = np.cov(x, y)
lambda_, v = np.linalg.eig(cov)
lambda_ = np.sqrt(lambda_)
from matplotlib.patches import Ellipse
import matplotlib.pyplot as plt
ax = plt.subplot(111, aspect='equal')
for j in xrange(1, 4):
    ell = Ellipse(xy=(np.mean(x), np.mean(y)),
                  width=lambda_[0]*j*2, height=lambda_[1]*j*2,
                  angle=np.rad2deg(np.arccos(v[0, 0])))
    ell.set_facecolor('none')
    ax.add_artist(ell)
plt.scatter(x, y)
plt.show()

Problem

How do I create a confidence ellipse in a scatterplot using matplotlib? The following code works until creating scatter plot. Then, is anyone familiar with putting confidence ellipses over the scatter plot? ``` 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() ``` Following is the reference for Confidence Ellipses from SAS. http://support.sas.com/documentation/cdl/en/grstatproc/62603/HTML/default/viewer.htm#a003160800.htm The code in sas is like this: ``` 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; ```

Original source

Related problems