class plotnine.scales.scale.scale_continuous(**kwargs)[source]

Base class for all continuous scales

breaksarray_like or callable(), optional

Major break points. Alternatively, a callable that takes a tuple of limits and returns a list of breaks. Default is to automatically calculate the breaks.

expandtuple, optional

Multiplicative and additive expansion constants that determine how the scale is expanded. If specified must be of length 2 or 4. Specifically the values are in this order:

(mul, add)
(mul_low, add_low, mul_high, add_high)

For example,

  • (0, 0) - Do not expand.

  • (0, 1) - Expand lower and upper limits by 1 unit.

  • (1, 0) - Expand lower and upper limits by 100%.

  • (0, 0, 0, 0) - Do not expand, as (0, 0).

  • (0, 0, 0, 1) - Expand upper limit by 1 unit.

  • (0, 1, 0.1, 0) - Expand lower limit by 1 unit and upper limit by 10%.

  • (0, 0, 0.1, 2) - Expand upper limit by 10% plus 2 units.

If not specified, suitable defaults are chosen.

namestr, optional

Name used as the label of the scale. This is what shows up as the axis label or legend title. Suitable defaults are chosen depending on the type of scale.

labelslist or callable(), optional

List of str. Labels at the breaks. Alternatively, a callable that takes an array_like of break points as input and returns a list of strings.

limitsarray_like, optional

Limits of the scale. Most commonly, these are the min & max values for the scales. For scales that deal with categoricals, these may be a subset or superset of the categories.


What value to assign to missing values. Default is to assign np.nan.

palettecallable(), optional

Function to map data points onto the scale. Most scales define their own palettes.

aestheticslist, optional

list of str. Aesthetics covered by the scale. These are defined by each scale and the user should probably not change them. Have fun.

transstr | function

Name of a trans function or a trans function. See mizani.transforms for possible options.


Function to deal with out of bounds (limits) data points. Default is to turn them into np.nan, which then get dropped.

minor_breakslist-like or int or callable() or None

If a list-like, it is the minor breaks points. If an integer, it is the number of minor breaks between any set of major breaks. If a function, it should have the signature func(limits) and return a list-like of consisting of the minor break points. If None, no minor breaks are calculated. The default is to automatically calculate them.

rescalerfunction, optional

Function to rescale data points so that they can be handled by the palette. Default is to rescale them onto the [0, 1] range. Scales that inherit from this class may have another default.


If using the class directly all arguments must be keyword arguments.

static rescaler(x, to=(0, 1), _from=None)

Rescale numeric vector to have specified minimum and maximum.

xarray_like | numeric

1D vector of values to manipulate.


output range (numeric vector of length two)


input range (numeric vector of length two). If not given, is calculated from the range of x


Rescaled values


>>> x = [0, 2, 4, 6, 8, 10]
>>> rescale(x)
array([0. , 0.2, 0.4, 0.6, 0.8, 1. ])
>>> rescale(x, to=(0, 2))
array([0. , 0.4, 0.8, 1.2, 1.6, 2. ])
>>> rescale(x, to=(0, 2), _from=(0, 20))
array([0. , 0.2, 0.4, 0.6, 0.8, 1. ])
static oob(x, range=(0, 1), only_finite=True)

Convert any values outside of range to a NULL type object.


Values to manipulate


(min, max) giving desired output range


If True (the default), will only modify finite values.


Censored array


All values in x should be of the same type. only_finite parameter is not considered for Datetime and Timedelta types.

The NULL type object depends on the type of values in x.


>>> a = [1, 2, np.inf, 3, 4, -np.inf, 5]
>>> censor(a, (0, 10))
[1, 2, inf, 3, 4, -inf, 5]
>>> censor(a, (0, 10), False)
[1, 2, nan, 3, 4, nan, 5]
>>> censor(a, (2, 4))
[nan, 2, inf, 3, 4, -inf, nan]

Train scale

x: pd.series | np.array

a column of data to train over

transform_df(df: DataFrame) DataFrame[source]

Transform dataframe

transform(x: FloatArrayLikeTV) FloatArrayLikeTV[source]

Transform array|series x

inverse(x: FloatArrayLikeTV) FloatArrayLikeTV[source]

Inverse transform array|series x

dimension(expand=(0, 0, 0, 0), limits=None)[source]

Get the phyical size of the scale

Unlike limits, this always returns a numeric vector of length 2

expand_limits(limits: ScaleContinuousLimits, expand: TupleFloat2 | TupleFloat4, coord_limits: CoordRange | None, trans: Trans) range_view[source]

Calculate the final range in coordinate space

view(limits: CoordRange | None = None, range: CoordRange | None = None) scale_view[source]

Information about the trained scale

default_expansion(mult=0.05, add=0, expand=True)[source]

Get the default expansion for continuous scale

static palette(arr: FloatArrayLike) Sequence[Any][source]

Aesthetic mapping function

map(x: AnyArrayLike, limits: ScaleContinuousLimits | None = None) AnyArrayLike[source]

Map every element of x

The palette should do the real work, this should make sure that sensible values are sent and return from the palette.

get_breaks(limits: ScaleContinuousLimits | None = None) ScaleContinuousBreaks[source]

Generate breaks for the axis or legend

limitslist-like | None

If None the self.limits are used They are expected to be in transformed space.



Breaks are calculated in data space and returned in transformed space since all data is plotted in transformed space.

get_bounded_breaks(limits: ScaleContinuousLimits | None = None) ScaleContinuousBreaks[source]

Return Breaks that are within limits

get_minor_breaks(major: ScaleContinuousBreaks, limits: ScaleContinuousLimits | None = None) ScaleContinuousBreaks[source]

Return minor breaks

get_labels(breaks: ScaleContinuousBreaks | None = None) ScaleLabels[source]

Generate labels for the axis or legend

breaks: None or array-like

If None, use self.breaks.