The 2019 SciPy John Hunter Excellence in Plotting Contest is accepting submissions!
Apply by June 8th

Version 3.1.0
Fork me on GitHub


Module that allows plotting of string "category" data. i.e. plot(['d', 'f', 'a'],[1, 2, 3]) will plot three points with x-axis values of 'd', 'f', 'a'.

See Plotting categorical variables for an example.

The module uses Matplotlib's matplotlib.units mechanism to convert from strings to integers, provides a tick locator and formatter, and the class:UnitData that creates and stores the string-to-integer mapping.

class matplotlib.category.StrCategoryConverter[source]

Bases: matplotlib.units.ConversionInterface

static axisinfo(unit, axis)[source]

Sets the default axis ticks and labels

unit : UnitData

object string unit information for value

axis : axis

axis for which information is being set

axisinfo : AxisInfo

Information to support default tick labeling

static convert(value, unit, axis)[source]

Convert strings in value to floats using mapping information store in the unit object.

value : string or iterable

Value or list of values to be converted.

unit : UnitData

An object mapping strings to integers.

axis : Axis

axis on which the converted value is plotted.


axis is unused.

mapped_value : float or ndarray[float]
static default_units(data, axis)[source]

Sets and updates the axis units.

data : string or iterable of strings
axis : axis

axis on which the data is plotted

class : UnitData

object storing string to integer mapping

class matplotlib.category.StrCategoryFormatter(units_mapping)[source]

Bases: matplotlib.ticker.Formatter

String representation of the data at every tick

units_mapping : Dict[Str, int]

string:integer mapping

class matplotlib.category.StrCategoryLocator(units_mapping)[source]

Bases: matplotlib.ticker.Locator

tick at every integer mapping of the string data

units_mapping : Dict[str, int]

string:integer mapping

tick_values(self, vmin, vmax)[source]

Return the values of the located ticks given vmin and vmax.


To get tick locations with the vmin and vmax values defined automatically for the associated axis simply call the Locator instance:

>>> print(type(loc))
<type 'Locator'>
>>> print(loc())
[1, 2, 3, 4]
class matplotlib.category.UnitData(data=None)[source]

Bases: object

Create mapping between unique categorical values and integer ids.

data : iterable

sequence of string values

update(self, data)[source]

Maps new values to integer identifiers.

data : iterable

sequence of string values


If the value in data is not a string, unicode, bytes type