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.