Source code for plotnine.scales.scale_size

from warnings import warn

import numpy as np
from mizani.bounds import rescale_max

from ..doctools import document
from ..exceptions import PlotnineWarning
from ..utils import alias
from .scale_continuous import scale_continuous
from .scale_datetime import scale_datetime
from .scale_discrete import scale_discrete


@document
class scale_size_ordinal(scale_discrete):
    """
    Discrete area size scale

    Parameters
    ----------
    range : array_like
        Minimum and maximum size of the plotting symbol.
        It must be of size 2.
    {superclass_parameters}
    """

    _aesthetics = ["size"]

    def __init__(self, range=(2, 6), **kwargs):
        def palette(n):
            area = np.linspace(range[0] ** 2, range[1] ** 2, n)
            return np.sqrt(area)

        self.palette = palette
        scale_discrete.__init__(self, **kwargs)


[docs]@document class scale_size_discrete(scale_size_ordinal): """ Discrete area size scale Parameters ---------- {superclass_parameters} """ _aesthetics = ["size"] def __init__(self, **kwargs): warn( "Using size for a discrete variable is not advised.", PlotnineWarning, ) super().__init__(**kwargs)
[docs]@document class scale_size_continuous(scale_continuous): """ Continuous area size scale Parameters ---------- range : array_like Minimum and maximum area of the plotting symbol. It must be of size 2. {superclass_parameters} """ _aesthetics = ["size"] def __init__(self, range=(1, 6), **kwargs): from mizani.palettes import area_pal # TODO: fix types in mizani self.palette = area_pal(range) # pyright: ignore scale_continuous.__init__(self, **kwargs)
alias("scale_size", scale_size_continuous)
[docs]@document class scale_size_radius(scale_continuous): """ Continuous radius size scale Parameters ---------- range : array_like Minimum and maximum radius of the plotting symbol. It must be of size 2. {superclass_parameters} """ _aesthetics = ["size"] def __init__(self, range=(1, 6), **kwargs): from mizani.palettes import rescale_pal # TODO: fix types in mizani self.palette = rescale_pal(range) # pyright: ignore scale_continuous.__init__(self, **kwargs)
[docs]@document class scale_size_area(scale_continuous): """ Continuous area size scale Parameters ---------- max_size : float Maximum size of the plotting symbol. {superclass_parameters} """ _aesthetics = ["size"] rescaler = staticmethod(rescale_max) def __init__(self, max_size=6, **kwargs): from mizani.palettes import abs_area # TODO: fix types in mizani self.palette = abs_area(max_size) # pyright: ignore scale_continuous.__init__(self, **kwargs)
[docs]@document class scale_size_datetime(scale_datetime): """ Datetime area-size scale Parameters ---------- range : array_like Minimum and maximum area of the plotting symbol. It must be of size 2. {superclass_parameters} """ _aesthetics = ["size"] def __init__(self, range=(1, 6), **kwargs): from mizani.palettes import area_pal # TODO: fix types in mizani self.palette = area_pal(range) # pyright: ignore scale_datetime.__init__(self, **kwargs)