Source code for pyiem.plot.layouts

"""Standardized layouts."""

from matplotlib.axes import Axes
from matplotlib.figure import Figure

from pyiem.plot.use_agg import figure as _figure
from pyiem.plot.util import draw_logo, fitbox, update_kwargs_apctx
from pyiem.reference import TWITTER_RESOLUTION_INCH


[docs] @update_kwargs_apctx def figure( logo: str = "iem", title: str = None, subtitle: str = None, **kwargs ) -> Figure: """Return an opinionated matplotlib figure. Parameters: figsize (width, height): in inches for the figure, defaults to something good for twitter. dpi (int): dots per inch logo (str): Currently, 'iem', 'dep' is supported. `None` disables. title (str): Title to place on the figure. subtitle (str): SubTitle to place on the figure. apctx (dict, optional): autoplot context. fig (matplotlib.figure.Figure): Figure passed in for modification for figsize only currently. """ kwargs.pop("apctx", None) kwargs["figsize"] = kwargs.get("figsize", TWITTER_RESOLUTION_INCH) fig = kwargs.pop("fig", None) if fig is None: fig = _figure(**kwargs) else: fig.set_size_inches(kwargs["figsize"]) draw_logo(fig, logo) titlebounds = [0.1, 0.98, 0.91, 0.98] if subtitle is not None: titlebounds[2] = 0.94 fitbox(fig, title, *titlebounds) fitbox(fig, subtitle, 0.1, 0.98, 0.91, 0.935) return fig
[docs] def figure_axes( logo: str = "iem", title: str = None, subtitle: str = None, **kwargs ) -> tuple[Figure, Axes]: """Return an opinionated matplotlib figure and one axes. Parameters: figsize (width, height): in inches for the figure, defaults to something good for twitter. dpi (int): dots per inch logo (str): Currently, 'iem', 'dep' is supported. `None` disables. title (str): Title to place on the figure. subtitle (str): SubTitle to place on the figure. """ fig = figure(logo=logo, title=title, subtitle=subtitle, **kwargs) ax = fig.add_axes((0.1, 0.1, 0.8, 0.8)) return fig, ax