Source code for plotnine_extra.scales.scale_manual

"""
Manual position scales.

``scale_x_manual`` and ``scale_y_manual`` are thin wrappers
around plotnine's discrete position scales that let users pass
a complete set of breaks, labels and palette values in one
call. Port of ``ggh4x::scale_x_manual`` / ``scale_y_manual``.
"""

from __future__ import annotations

from typing import TYPE_CHECKING

from plotnine.scales.scale_xy import (
    scale_x_discrete,
    scale_y_discrete,
)

if TYPE_CHECKING:
    from typing import Sequence


__all__ = ("scale_x_manual", "scale_y_manual")


[docs] def scale_x_manual( values: "Sequence", breaks: "Sequence | None" = None, labels: "Sequence | None" = None, name: str | None = None, **kwargs, ): """ Discrete x-axis scale with explicit ``values`` ordering. Parameters ---------- values : sequence Ordered list of category values that should appear on the axis. Acts as both ``limits`` and the axis order. breaks : sequence, optional Subset of ``values`` to label. labels : sequence, optional Display labels matching ``breaks``. name : str, optional Axis title. """ if breaks is None: breaks = list(values) if labels is None: labels = list(values) return scale_x_discrete( limits=list(values), breaks=list(breaks), labels=list(labels), name=name, **kwargs, )
[docs] def scale_y_manual( values: "Sequence", breaks: "Sequence | None" = None, labels: "Sequence | None" = None, name: str | None = None, **kwargs, ): """ Discrete y-axis scale with explicit ``values`` ordering. See :func:`scale_x_manual` for parameter descriptions. """ if breaks is None: breaks = list(values) if labels is None: labels = list(values) return scale_y_discrete( limits=list(values), breaks=list(breaks), labels=list(labels), name=name, **kwargs, )