Source code for figrecipe._dev.demo_plotters._figure_creators

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Figure creation functions for demo plotters."""

import math
from pathlib import Path
from typing import Dict, Tuple

import numpy as np

from ..._api._panel import panel_label
from ._registry import REGISTRY


[docs] def create_all_plots_figure(plt, seed: int = 42) -> Tuple: """Create a single figure with all supported plot types. Parameters ---------- plt : module figrecipe module (import figrecipe as fr). seed : int Random seed for reproducibility. Returns ------- tuple (fig, axes, results) where results maps name to success/error. """ rng = np.random.default_rng(seed) n_plots = len(REGISTRY) ncols = 7 nrows = math.ceil(n_plots / ncols) fig, axes = plt.subplots(nrows=nrows, ncols=ncols) axes_flat = axes.flatten() results = {} for i, (name, plotter) in enumerate(REGISTRY.items()): ax = axes_flat[i] try: plotter(plt, rng, ax=ax) results[name] = {"success": True, "error": None} except Exception as e: ax.set_title(f"{name}\n(ERROR)") ax.text( 0.5, 0.5, str(e)[:50], ha="center", va="center", transform=ax.transAxes, fontsize=6, wrap=True, ) results[name] = {"success": False, "error": str(e)} # Hide unused axes for i in range(n_plots, len(axes_flat)): axes_flat[i].set_visible(False) # Add panel labels panel_labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" * 2 for i, ax in enumerate(axes_flat[:n_plots]): if i < len(panel_labels): panel_label(ax, panel_labels[i]) fig.suptitle(f"All {n_plots} Supported Plot Types") return fig, axes, results
[docs] def run_individual_demos(plt, output_dir=None, show=False) -> Dict: """Run all demo plotters individually and optionally save outputs. Parameters ---------- plt : module figrecipe or matplotlib.pyplot module. output_dir : Path, optional Directory to save output images. show : bool Whether to show figures. Returns ------- dict Results for each demo: {name: {'success': bool, 'error': str or None}} """ rng = np.random.default_rng(42) results = {} if output_dir: output_dir = Path(output_dir) output_dir.mkdir(parents=True, exist_ok=True) for name, plotter in REGISTRY.items(): try: fig, ax = plotter(plt, rng) if output_dir: out_path = output_dir / f"plot_{name}.png" mpl_fig = fig.fig if hasattr(fig, "fig") else fig mpl_fig.savefig(out_path, dpi=100, bbox_inches="tight") if show: plt.show() else: mpl_fig = fig.fig if hasattr(fig, "fig") else fig plt.close(mpl_fig) results[name] = {"success": True, "error": None} except Exception as e: results[name] = {"success": False, "error": str(e)} return results
# Legacy alias run_all_demos = run_individual_demos # EOF