Source code for plopp.plotting.scatter

# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2024 Scipp contributors (https://github.com/scipp)

import uuid
from functools import partial
from typing import Literal

import scipp as sc

from ..core.typing import FigureLike, PlottableMulti
from .common import check_not_binned, from_compatible_lib, input_to_nodes


def _preprocess_scatter(
    obj: PlottableMulti,
    x: str,
    y: str,
    size: str | None,
    name: str | None = None,
):
    da = from_compatible_lib(obj)
    check_not_binned(da)

    cnames = [x, y]
    if isinstance(size, str):
        cnames.append(size)
    coords = {k: da.coords[k] for k in cnames}
    out = sc.DataArray(data=da.data, masks=da.masks, coords=coords)
    if out.ndim != 1:
        out = out.flatten(to=uuid.uuid4().hex)
    if name is not None:
        out.name = name
    return out


[docs] def scatter( obj: PlottableMulti, *, x: str = 'x', y: str = 'y', size: str | float | None = None, figsize: tuple[float, float] | None = None, norm: Literal['linear', 'log'] = 'linear', title: str | None = None, vmin: sc.Variable | float = None, vmax: sc.Variable | float = None, cbar: bool = False, cmap: str = 'viridis', legend: bool | tuple[float, float] = True, **kwargs, ) -> FigureLike: """ Make a two-dimensional scatter plot. .. versionadded:: 24.04.0 Parameters ---------- obj: The object to be plotted. x: The name of the coordinate that is to be used for the X positions. y: The name of the coordinate that is to be used for the Y positions. size: The size of the marker. If a float is supplied, all markers will have the same size. If a string is supplied, it will be the name of the coordinate that is to be used for the size of the markers. figsize: The width and height of the figure, in inches. norm: Set to ``'log'`` for a logarithmic colorscale (only applicable if ``cbar`` is ``True``). title: The figure title. vmin: Lower bound for the colorscale for (only applicable if ``cbar`` is ``True``). vmax: Upper bound for the colorscale for (only applicable if ``cbar`` is ``True``). cbar: Show colorbar if ``True``. If ``cbar`` is ``True``, the marker will be colored using the data values in the supplied data array. cmap: The colormap to be used for the colorscale. legend: Show legend if ``True``. If ``legend`` is a tuple, it should contain the ``(x, y)`` coordinates of the legend's anchor point in axes coordinates. **kwargs: All other kwargs are forwarded the underlying plotting library. """ from ..graphics import scatterfigure nodes = input_to_nodes( obj, processor=partial(_preprocess_scatter, x=x, y=y, size=size) ) return scatterfigure( *nodes, x=x, y=y, size=size, figsize=figsize, norm=norm, title=title, vmin=vmin, vmax=vmax, cmap=cmap, cbar=cbar, legend=legend, **kwargs, )