# scope_profiler.plotting_scripts.durations

*module*

Duration bar charts: per-region totals/averages, optionally stacked by caller.

[View source](https://github.com/max-models/scope-profiler/blob/devel/src/scope_profiler/plotting_scripts/durations.py#L1-L1)

## scope_profiler.plotting_scripts.durations.plot_durations

*function*

```python
def plot_durations(profiling_data: ProfilingResults | Sequence[ProfilingResults], ranks: list[int] | int | None = None, include: list[str] | str | None = None, exclude: list[str] | str | None = None, labels: Sequence[str] | None = None, metric: str = 'total', metrics: Sequence[str] | None = None, sort_by: str | None = None, top_n: int | None = None, combine_regions: dict[str, list[str] | str] | None = None, stack_children: bool = False, filepath: str | None = None, show: bool = False, verbose: bool = True, cmap: str = DEFAULT_CMAP, log_scale: bool = False, data_filepath: str | Path | None = None, data_format: str = 'csv', backend: str = 'matplotlib', return_fig: bool = False) -> list[str] | list[object] | object
```

Plot duration bar charts for one or more profiling files using maxplotlib.

Parameters
----------
combine_regions : dict[str, list[str] | str], optional
    Merge several regions into a single bar, e.g. ``{"setup": ["setup:
    .*"]}`` combines every ``setup: ...`` region into one bar named
    "setup", pooling their calls the same way ``sort_by`` and the other
    duration statistics pool a single region's calls. Each value is one
    or more regex patterns (matched like ``include``); a region matching
    several groups is claimed by whichever group is listed first.
metric : str
    Duration metric to render (``avg``, ``min``, ``max``, ``total``,
    ``first`` or ``last``). ``first``/``last`` are the durations of the
    chronologically first and last call, which show how much of a
    region's cost is one-off warmup rather than steady state.
metrics : Sequence[str], optional
    Render several metrics instead of one. Each gets its own figure --
    ``filepath`` is suffixed with the metric name, as it always was for
    multiple metrics - but a single ``data_filepath`` holds them all,
    with the metric named per row, so one export can back a chart whose
    metric the viewer switches. Overrides ``metric`` when given.
stack_children : bool
    Split each bar into the region's own (exclusive) time plus one
    segment per region called directly from it, stacked on top of each
    other, so a bar shows where its time went instead of only how much
    there was. The nesting comes from timestamp containment, the same
    reconstruction the flame chart uses, over every region in the run --
    a child that is filtered out of the bars still gets its own segment.
    Only ``total`` and ``avg`` decompose this way; ``min``/``max`` are
    rejected. Colors then identify segments rather than runs, so with
    several runs the bars are still grouped per region in run order but
    the legend names the segments.
backend : str
    Backend to use for rendering: "matplotlib" (default) or "plotly".
return_fig : bool
    Return the rendered figure instead of the saved filepath list.

Returns
-------
list[str]
    List of filepaths that were written (empty if filepath is None).
    With ``return_fig``, the rendered figure, or the list of figures
    when several metrics were requested.

[View source](https://github.com/max-models/scope-profiler/blob/devel/src/scope_profiler/plotting_scripts/durations.py#L379-L763)
