Source code for ssd.utils.plots

# -*- coding: utf-8 -*-
"""
SSD - plotting utilities

Some utility functions for plotting and displaying the results of the simulation.
"""
from typing import Optional

import matplotlib as mpl
import numpy as np
from matplotlib import pyplot as plt

mpl.use('agg')
plt.style.use('ggplot')
plt.rcParams['figure.figsize'] = (8, 6)


[docs]def plot_inverse_mp_distribution( evl: list, x: list, y: list, y_dist: list, k2min: Optional[float] = None, k2max: Optional[float] = None, bins: int = 1000, output: str = 'output_dir', subprefix: str = 'mp_inv_dist', ): """ Plot the inverse Marchenko-Pastur distribution. Parameters ---------- evl : list Inverse eigenvalues of the covariance matrix x : list x values of the distributions y : list y values of the MP distribution (inverse) y_dist : list y values of the empirical distribution k2min : float, optional Lower bound of the integration interval, by default None k2max : float, optional Upper bound of the integration interval, by default None bins : int, optional Number of bins for the histogram, by default 1000 output : str, optional Output directory, by default 'output_dir' subprefix : str, optional Prefix of the output files, by default 'mp_inv_dist' """ fig, ax = plt.subplots() ax.hist(evl, bins=bins, density=True, label='empirical', alpha=0.5, color='b') ax.plot(x, y_dist, 'k-', label='interpolated') ax.plot(x, y, 'r-', label='theoretical') ax.set_xlabel(r'$k^2$') ax.set_ylabel(r'$\rho$') ax_inset_1 = fig.add_axes([0.35, 0.25, 0.35, 0.55]) ax_inset_1.set_xlim([-0.1, 0.5]) ax_inset_1.set_ylim([0.0, 1.1]) ax_inset_1.hist(evl, bins=bins, density=True, alpha=0.5, label='empirical', color='b') ax_inset_1.plot(x, y_dist, 'k-', label='interpolated') ax_inset_1.plot(x, y, 'r-', label='theoretical') if (k2min is not None) and (k2max is not None): ax_inset_1.axvline(k2min, 0.0, 1.0, color='k', linestyle='--') ax_inset_1.axvline(k2max, 0.0, 1.0, color='k', linestyle='--') ax.indicate_inset_zoom(ax_inset_1) ax.legend(loc='best') plt.savefig(output / f'{subprefix}_mp_inv_dist.pdf') plt.close(fig)
[docs]def plot_mp_distribution(evl: list, x: list, y: list, n_bins: int = 100, output: str = 'output_dir', subprefix: str = 'mp_dist'): """ Plot the Marchenko-Pastur distribution. Parameters ---------- evl : list Eigenvalues of the covariance matrix x : list x values of the MP distribution y : list y values of the MP distribution n_bins : int, optional Number of bins for the histogram, by default 100 output : str, optional Output directory, by default 'output_dir' subprefix : str, optional Prefix of the output files, by default 'mp_dist' """ fig, ax = plt.subplots() ax.hist(evl, bins=n_bins, density=True, label='empirical', alpha=0.5, color='b') ax.plot(x, y, 'r-', label='MP distribution') ax.set_xlabel('eigenvalues') ax.set_ylabel(r'$\mu$') ax_inset_1 = fig.add_axes([0.5, 0.24, 0.35, 0.25]) ax_inset_1.set_xlim([2.5, 1.05 * evl.max()]) ax_inset_1.set_ylim([0.0, 0.2]) ax_inset_1.hist(evl, bins=n_bins, density=True, alpha=0.5, label='empirical', color='b') ax_inset_1.plot(x, y, 'r-', label='theoretical') ax_inset_2 = fig.add_axes([0.25, 0.55, 0.35, 0.25]) ax_inset_2.set_xlim([-0.1, 1.5]) ax_inset_2.set_ylim([0.2, 0.9]) ax_inset_2.hist(evl, bins=n_bins, density=True, alpha=0.5, label='empirical', color='b') ax_inset_2.plot(x, y, 'r-', label='theoretical') ax.indicate_inset_zoom(ax_inset_1) ax.indicate_inset_zoom(ax_inset_2) ax.legend(loc='best') plt.savefig(output / f'{subprefix}_mp_dist.pdf') plt.close(fig)
[docs]def plot_potential(xinf: float = 0.0, xsup: float = 0.0, nval: int = 1000, mu1: float = 0.0, mu2: float = 1.0, mu3: float = 0.0, output: str = 'output_dir', prefix: str = 'initial_potential'): """ Plot the initial potential. Parameters ---------- xinf : float, optional Lower bound of the domain, by default 0.0 xsup : float, optional Upper bound of the domain, by default 0.0 nval : int, optional Number of grid points, by default 1000 mu1 : float, optional Mass parameter (quadratic term), by default 0.0 mu2 : float, optional Quartic term, by default 1.0 mu3 : float, optional 6th power term, by default 0.0 output : str, optional Output directory, by default 'output_dir' prefix : str, optional Prefix of the output files, by default 'initial_potential' """ fig, ax = plt.subplots() x = np.linspace(xinf, xsup, nval) y = mu1*x + mu2 * x**2 + mu3 * x**3 ax.plot(x, y, 'k-', label='potential') ax.set_xlabel(r'$\chi$') ax.set_ylabel(r'$\overline{\mathcal{U}}$') ax.set_xticks([]) ax.set_yticks([]) ax.set_xticklabels([]) ax.set_yticklabels([]) ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.spines['left'].set_position(('data', 0)) ax.spines['bottom'].set_position(('data', 0)) ax.spines['left'].set_linewidth(2) ax.spines['bottom'].set_linewidth(2) ax.plot(1, 0, ">k", transform=ax.get_yaxis_transform(), clip_on=False, markersize=20) ax.plot(0, 1, "^k", transform=ax.get_xaxis_transform(), clip_on=False, markersize=20) plt.tight_layout() plt.savefig(output / f'{prefix}_potential.pdf') plt.close(fig)