Source code for utopya.eval.plots._mpl

"""This module provides matplotlib-related helper constructs"""

import copy
import logging
from typing import Tuple, Union

import matplotlib as mpl
import matplotlib.patches as mpatches
import numpy as np
from dantro.plot import ColorManager
from matplotlib.legend_handler import HandlerPatch

log = logging.getLogger(__name__)

# -----------------------------------------------------------------------------

[docs]def adjust_figsize_to_aspect( aspect: float, *, fig: "matplotlib.figure.Figure" ) -> Tuple[float, float]: """Adjusts the given figures size, *enlarging* it to match the given aspect ratio where ``width = height * aspect``. Args: aspect (float): The aspect ratio ``width / height`` fig (matplotlib.figure.Figure): The figure Returns: Tuple[float, float]: New width and height of the figure in inches. """ w, h = fig.get_size_inches() if w < h * aspect: w = h * aspect else: h = w / aspect fig.set_size_inches(w, h) return fig.get_size_inches()
[docs]class HandlerEllipse(HandlerPatch): """Custom legend handler to turn an ellipse handle into a legend key.""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)
[docs] def create_artists( self, legend, orig_handle, xdescent, ydescent, width, height, fontsize, trans, ): """Create an ellipse as a matplotlib artist object.""" center = 0.5 * width - 0.5 * xdescent, 0.5 * height - 0.5 * ydescent p = mpatches.Ellipse( xy=center, width=height + xdescent, height=height + ydescent ) self.update_prop(p, orig_handle, legend) p.set_transform(trans) return [p]