Grid Layout Helper
GitHub Link to Code.
Helper class for grid layout computation in plots.
Provides intelligent grid layout algorithms for arranging subplots in a quadratic figure with proportional spacing based on content counts.
- class mdxplain.plots.helper.grid_layout_helper.GridLayoutHelper
Helper class for grid layout computation.
Provides static methods for computing uniform subplot arrangements in matplotlib figures. Creates grids where each item occupies equal width (colspan=1), arranged in rows and columns.
Examples
>>> # Compute uniform layout for 10 features with max 4 columns >>> layout, n_rows, n_cols = GridLayoutHelper.compute_uniform_grid_layout(10, 4) >>> print(f"Grid: {n_rows}x{n_cols}") Grid: 3x4 >>> print(layout[0]) # First item (0, 0, 0, 1) # item_index=0, row=0, col=0, colspan=1 >>> print(layout[4]) # Start of second row (4, 1, 0, 1) # item_index=4, row=1, col=0, colspan=1
- static compute_uniform_grid_layout(n_items: int, max_cols: int) Tuple[List[Tuple[int, int, int, int]], int, int]
Compute uniform grid layout with equal-width items.
Creates grid layout where each item occupies exactly one cell (colspan=1), arranged left-to-right, top-to-bottom, with maximum of max_cols columns per row.
Parameters
- n_itemsint
Total number of items to arrange
- max_colsint
Maximum columns per row
Returns
- layoutList[Tuple[int, int, int, int]]
List of (item_index, row, col, colspan) tuples
- n_rowsint
Number of grid rows
- n_colsint
Number of grid columns (actual columns used, <= max_cols)
Examples
>>> # 10 items with max 4 columns >>> layout, n_rows, n_cols = GridLayoutHelper.compute_uniform_grid_layout(10, 4) >>> print(f"Grid: {n_rows}x{n_cols}") Grid: 3x4 >>> print(layout[0]) # First item (0, 0, 0, 1) # item_index=0, row=0, col=0, colspan=1 >>> print(layout[4]) # Fifth item (start of second row) (4, 1, 0, 1) # item_index=4, row=1, col=0, colspan=1
>>> # 3 items with max 5 columns >>> layout, n_rows, n_cols = GridLayoutHelper.compute_uniform_grid_layout(3, 5) >>> print(f"Grid: {n_rows}x{n_cols}") Grid: 1x3
>>> # Empty case >>> layout, n_rows, n_cols = GridLayoutHelper.compute_uniform_grid_layout(0, 4) >>> print(n_rows, n_cols) 0 1
Notes
Algorithm: 1. Determine actual columns used: min(n_items, max_cols) 2. Calculate rows needed: ceil(n_items / n_cols) 3. Pack items left-to-right, top-to-bottom
Each item gets:
Unique position (row, col)
colspan=1 (uniform width)
Sequential item_index for tracking
Used for density and violin plots where each subplot shows one feature or one feature+DataSelector combination.