Source code for pmpl.formatters

"""Axis-level formatting utilities for matplotlib plots.

These functions allow you to format existing axes objects directly,
without using context managers or changing global rcParams.
"""

from typing import Any

from matplotlib.axes import Axes


[docs] def format_horizontal( ax: Axes, grid: bool = True, grid_alpha: float = 0.3, **spine_kwargs: Any, ) -> Axes: """Format an axis for horizontal plots (e.g., horizontal bar charts). Shows only the left spine with vertical gridlines. Args: ax: The matplotlib Axes object to format grid: Whether to show gridlines grid_alpha: Transparency of gridlines (0-1) **spine_kwargs: Additional kwargs passed to spine configuration Returns: The formatted Axes object (for chaining) Example: >>> import matplotlib.pyplot as plt >>> import pmpl >>> fig, ax = plt.subplots() >>> ax.barh(['A', 'B', 'C'], [1, 2, 3]) >>> pmpl.format_horizontal(ax) >>> plt.show() """ # Configure spines ax.spines["top"].set_visible(False) ax.spines["right"].set_visible(False) ax.spines["bottom"].set_visible(False) ax.spines["left"].set_visible(True) # Apply any custom spine styling for spine_name, visible in spine_kwargs.items(): if hasattr(ax.spines, spine_name): ax.spines[spine_name].set_visible(visible) # Configure grid if grid: ax.grid(True, axis="x", alpha=grid_alpha) ax.set_axisbelow(True) else: ax.grid(False) # Remove tick marks on x-axis, keep them on y-axis ax.tick_params(axis="x", length=0) ax.tick_params(axis="y", length=5) return ax
[docs] def format_vertical( ax: Axes, grid: bool = True, grid_alpha: float = 0.3, **spine_kwargs: Any, ) -> Axes: """Format an axis for vertical plots (e.g., line charts, bar charts). Shows only the bottom spine with horizontal gridlines. Args: ax: The matplotlib Axes object to format grid: Whether to show gridlines grid_alpha: Transparency of gridlines (0-1) **spine_kwargs: Additional kwargs passed to spine configuration Returns: The formatted Axes object (for chaining) Example: >>> import matplotlib.pyplot as plt >>> import pmpl >>> fig, ax = plt.subplots() >>> ax.plot([1, 2, 3], [1, 4, 2]) >>> pmpl.format_vertical(ax) >>> plt.show() """ # Configure spines ax.spines["top"].set_visible(False) ax.spines["right"].set_visible(False) ax.spines["left"].set_visible(False) ax.spines["bottom"].set_visible(True) # Apply any custom spine styling for spine_name, visible in spine_kwargs.items(): if hasattr(ax.spines, spine_name): ax.spines[spine_name].set_visible(visible) # Configure grid if grid: ax.grid(True, axis="y", alpha=grid_alpha) ax.set_axisbelow(True) else: ax.grid(False) # Remove tick marks on y-axis, keep them on x-axis ax.tick_params(axis="y", length=0) ax.tick_params(axis="x", length=5) return ax
[docs] def format_base( ax: Axes, grid: bool = True, grid_axis: str = "y", grid_alpha: float = 0.3, ) -> Axes: """Apply base formatting to an axis (no spines, customizable grid). Args: ax: The matplotlib Axes object to format grid: Whether to show gridlines grid_axis: Which axis to show gridlines on ('x', 'y', or 'both') grid_alpha: Transparency of gridlines (0-1) Returns: The formatted Axes object (for chaining) Example: >>> import matplotlib.pyplot as plt >>> import pmpl >>> fig, ax = plt.subplots() >>> ax.scatter([1, 2, 3], [1, 4, 2]) >>> pmpl.format_base(ax, grid_axis='both') >>> plt.show() """ # Hide all spines for spine in ax.spines.values(): spine.set_visible(False) # Configure grid if grid: ax.grid(True, axis=grid_axis, alpha=grid_alpha) ax.set_axisbelow(True) else: ax.grid(False) # Remove all tick marks ax.tick_params(axis="both", length=0) return ax