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

Base class for all 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.

expand: TupleFloat2 | TupleFloat4 | None = None

multiplicative and additive expansion constants

static palette(n)[source]

Aesthetic mapping function

Note that not all scales need to implement/provide a palette. For example identity & position scales do not use a palette.

map(x, limits=None)[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.


Train scale

x: pd.series | np.array

a column of data to train over

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

Get the phyical size of the scale.

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

Exand the limits of the scale

transform_df(df: DataFrame) DataFrame[source]

Transform dataframe


Transform array|series x


Inverse transform array|series x

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

Information about the trained scale

default_expansion(mult: float | TupleFloat2 = 0, add: float | TupleFloat2 = 0, expand=True) TupleFloat4[source]

Get default expansion for this scale


Set the range of the scale to None.

i.e Forget all the training

is_empty() bool[source]

Whether the scale has size information

train_df(df: DataFrame)[source]

Train scale from a dataframe

map_df(df: DataFrame) DataFrame[source]

Map df

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

Get labels, calculating them if required

get_breaks(limits: ScaleLimits | None = None) ScaleBreaks[source]

Get Breaks

get_bounded_breaks(limits: ScaleLimits | None = None) ScaleBreaks[source]

Return Breaks that are within the limits