Source code for nirs4all.visualization.charts.config

"""
ChartConfig - Configuration for chart appearance and behavior.

Provides customization options for colors, fonts, and figure sizes.
All parameters have sensible defaults for seamless usage.
"""
from dataclasses import dataclass, field
from typing import Optional, Dict
import matplotlib.pyplot as plt


[docs] @dataclass class ChartConfig: """Configuration for chart appearance and behavior. Provides customization options for colors, fonts, and figure sizes. All parameters have sensible defaults for seamless usage. Attributes: colormap: Matplotlib colormap name for gradients (default: 'viridis'). heatmap_colormap: Colormap for heatmaps (default: 'RdYlGn'). partition_colors: Dict mapping partition names to colors. font_family: Font family for all text (default: matplotlib default). title_fontsize: Font size for titles (default: 14). label_fontsize: Font size for axis labels (default: 10). tick_fontsize: Font size for tick labels (default: 9). legend_fontsize: Font size for legend text (default: 9). annotation_fontsize: Font size for text annotations inside charts (default: 9). figsize_small: Small figure size (default: (10, 6)). figsize_medium: Medium figure size (default: (12, 8)). figsize_large: Large figure size (default: (16, 10)). dpi: Output resolution (default: 300). alpha: Default alpha for plot elements (default: 0.7). """ # Color schemes colormap: str = 'viridis' heatmap_colormap: str = 'RdYlGn' partition_colors: Optional[Dict[str, str]] = None # Font settings font_family: Optional[str] = None title_fontsize: int = 14 label_fontsize: int = 10 tick_fontsize: int = 9 legend_fontsize: int = 9 annotation_fontsize: int = 9 # Figure sizes figsize_small: tuple = (10, 4) figsize_medium: tuple = (12, 8) figsize_large: tuple = (16, 10) # Other settings dpi: int = 300 alpha: float = 0.7
[docs] def __post_init__(self): """Initialize default partition colors if not provided.""" if self.partition_colors is None: self.partition_colors = { 'train': '#1f77b4', # Blue 'val': '#ff7f0e', # Orange 'test': '#2ca02c' # Green }
[docs] def apply_font_settings(self) -> None: """Apply font settings to matplotlib rcParams.""" if self.font_family: plt.rcParams['font.family'] = self.font_family plt.rcParams['axes.titlesize'] = self.title_fontsize plt.rcParams['axes.labelsize'] = self.label_fontsize plt.rcParams['xtick.labelsize'] = self.tick_fontsize plt.rcParams['ytick.labelsize'] = self.tick_fontsize plt.rcParams['legend.fontsize'] = self.legend_fontsize
[docs] def get_figsize(self, size: str = 'medium') -> tuple: """Get figure size by name. Args: size: Size name ('small', 'medium', 'large'). Returns: Tuple of (width, height). """ sizes = { 'small': self.figsize_small, 'medium': self.figsize_medium, 'large': self.figsize_large } return sizes.get(size, self.figsize_medium)