Source code for smefit.analyze.tools

import numpy as np
from matplotlib.patches import Ellipse
import matplotlib.transforms as transforms


[docs]def confidence_ellipse(x, y, ax, n_std=3.0, facecolor="none", **kwargs): """ Create a plot of the covariance confidence ellipse of `x` and `y` Parameters ---------- x, y : array_like, shape (n, ) Input data. ax : matplotlib.axes.Axes The axes object to draw the ellipse into. n_std : float The number of standard deviations to determine the ellipse's radiuses. Returns ------- matplotlib.patches.Ellipse Other parameters ---------------- kwargs : `~matplotlib.patches.Patch` properties """ if x.size != y.size: raise ValueError("x and y must be the same size") cov = np.cov(x, y) pearson = cov[0, 1] / np.sqrt(cov[0, 0] * cov[1, 1]) # Using a special case to obtain the eigenvalues of this # two-dimensionl dataset. ell_radius_x = np.sqrt(1 + pearson) ell_radius_y = np.sqrt(1 - pearson) ellipse = Ellipse( (0, 0), width=ell_radius_x * 2, height=ell_radius_y * 2, facecolor=facecolor, **kwargs ) # Calculating the stdandard deviation of x from # the squareroot of the variance and multiplying # with the given number of standard deviations. scale_x = np.sqrt(cov[0, 0]) * n_std mean_x = np.mean(x) # calculating the stdandard deviation of y ... scale_y = np.sqrt(cov[1, 1]) * n_std mean_y = np.mean(y) transf = ( transforms.Affine2D() .rotate_deg(45) .scale(scale_x, scale_y) .translate(mean_x, mean_y) ) ellipse.set_transform(transf + ax.transData) return ax.add_patch(ellipse)
[docs]def latex_packages(): L = [] L.append(r"\documentclass{article}") L.append(r"\usepackage{float}") L.append(r"\usepackage{amsmath}") L.append(r"\usepackage{amssymb}") L.append(r"\usepackage{booktabs}") L.append(r"\usepackage[a4paper]{geometry}") L.append(r"\usepackage{array}") L.append(r"\usepackage{hyperref}") L.append(r"\usepackage{xcolor}") L.append(r"\usepackage{multirow}") L.append(r"\usepackage{pdflscape}") L.append(r"\allowdisplaybreaks") L.append( r"\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}" ) L.append(r"\usepackage{graphicx}") L.append(r"\usepackage{tabularx}") L.append( r"\geometry{verbose, tmargin = 1.5cm, bmargin = 1.5cm, lmargin = 1cm, rmargin = 1cm}" ) return L