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

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

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.

limitsarray_like, optional

Limits of the scale. For scales that deal with categoricals, these may be a subset or superset of the categories. Data values that are not in the limits will be treated as missing data and represented with the na_value.


Whether to drop unused categories from the scale


If True translate missing values and show them. If False remove missing values. Default value is True


If na_translate=True, what aesthetic value should be assigned to the missing values. This parameter does not apply to position scales where nan is always placed on the right.

static palette(n: int) Sequence[Any][source]

Aesthetic mapping function

train(x, drop=False)[source]

Train scale

x: pd.series | np.array

a column of data to train over


Whether to drop(not include) unused categories

A discrete range is stored in a list
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: ScaleDiscreteLimits, expand: TupleFloat2 | TupleFloat4, coord_limits: TupleFloat2, trans: Trans) range_view[source]

Calculate the final range in coordinate space

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

Information about the trained scale

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

Get the default expansion for a discrete scale

map(x, limits: ScaleDiscreteLimits | None = None) Sequence[Any][source]

Map values in x to a palette

get_breaks(limits: ScaleDiscreteLimits | None = None) ScaleDiscreteBreaks[source]

Return an ordered list of breaks

The form is suitable for use by the guides e.g.

['fair', 'good', 'very good', 'premium', 'ideal']

get_bounded_breaks(limits: ScaleDiscreteLimits | None = None) ScaleDiscreteBreaks[source]

Return Breaks that are within limits

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

Generate labels for the legend/guide breaks

transform_df(df: DataFrame) DataFrame[source]

Transform dataframe


Transform array|series x