Source code for ogstools.meshplotlib.utils
# Copyright (c) 2012-2024, OpenGeoSys Community (http://www.opengeosys.org)
#            Distributed under a Modified BSD License.
#            See accompanying file LICENSE.txt or
#            http://www.opengeosys.org/project/license
#
from typing import Optional
import matplotlib.pyplot as plt
import numpy as np
from cycler import Cycler
[docs]
def justified_labels(points: np.ndarray) -> list[str]:
    "Formats an array of points to a list of aligned str."
    def fmt(val: float) -> str:
        return f"{val:.2f}".rstrip("0").rstrip(".")
    col_lens = np.max(
        [[len(fmt(coord)) for coord in point] for point in points], axis=0
    )
    dim = points.shape[1]
    return [
        ",".join(fmt(point[i]).rjust(col_lens[i]) for i in range(dim))
        for point in points
    ] 
[docs]
def get_style_cycler(
    min_number_of_styles: int,
    colors: Optional[Optional[list]] = None,
    linestyles: Optional[list] = None,
) -> Cycler:
    if colors is None:
        colors = plt.rcParams["axes.prop_cycle"].by_key()["color"]
    if linestyles is None:
        linestyles = ["-", "--", ":", "-."]
    styles_len = min(len(colors), len(linestyles))
    c_cycler = plt.cycler(color=colors)
    ls_cycler = plt.cycler(linestyle=linestyles)
    if min_number_of_styles <= styles_len:
        style_cycler = c_cycler[:styles_len] + ls_cycler[:styles_len]
    else:
        style_cycler = ls_cycler * c_cycler
    return style_cycler