Table Of Contents

Previous topic

matplotlib spine

Next topic

matplotlib units

This Page

matplotlib ticker


Tick locating and formatting

This module contains classes to support completely configurable tick locating and formatting. Although the locators know nothing about major or minor ticks, they are used by the Axis class to support major and minor tick locating and formatting. Generic tick locators and formatters are provided, as well as domain specific custom ones..

Tick locating

The Locator class is the base class for all tick locators. The locators handle autoscaling of the view limits based on the data limits, and the choosing of tick locations. A useful semi-automatic tick locator is MultipleLocator. You initialize this with a base, eg 10, and it picks axis limits and ticks that are multiples of your base.

The Locator subclasses defined here are

No ticks
Tick locations are fixed
locator for index plots (eg. where x = range(len(y)))
evenly spaced ticks from min to max
logarithmically ticks from min to max
ticks and range are a multiple of base;
either integer or float
choose a MultipleLocator and dyamically reassign it for intelligent ticking during navigation
finds up to a max number of ticks at nice locations
MaxNLocator with simple defaults. This is the default tick locator for most plotting.

There are a number of locators specialized for date locations - see the dates module

You can define your own locator by deriving from Locator. You must override the __call__ method, which returns a sequence of locations, and you will probably want to override the autoscale method to set the view limits from the data limits.

If you want to override the default locator, use one of the above or a custom locator and pass it to the x or y axis instance. The relevant methods are:

ax.xaxis.set_major_locator( xmajorLocator )
ax.xaxis.set_minor_locator( xminorLocator )
ax.yaxis.set_major_locator( ymajorLocator )
ax.yaxis.set_minor_locator( yminorLocator )

The default minor locator is the NullLocator, eg no minor ticks on by default.

Tick formatting

Tick formatting is controlled by classes derived from Formatter. The formatter operates on a single tick value and returns a string to the axis.

no labels on the ticks
set the strings from a list of labels
set the strings manually for the labels
user defined function sets the labels
use a sprintf format string
default formatter for scalars; autopick the fmt string
formatter for log axes

You can derive your own formatter from the Formatter base class by simply overriding the __call__ method. The formatter class has access to the axis view and data limits.

To control the major and minor tick label formats, use one of the following methods:

ax.xaxis.set_major_formatter( xmajorFormatter )
ax.xaxis.set_minor_formatter( xminorFormatter )
ax.yaxis.set_major_formatter( ymajorFormatter )
ax.yaxis.set_minor_formatter( yminorFormatter )

See pylab_examples example code: for an example of setting major an minor ticks. See the matplotlib.dates module for more information and examples of using date locators and formatters.

class matplotlib.ticker.TickHelper
class DummyAxis
set_data_interval(vmin, vmax)
set_view_interval(vmin, vmax)
TickHelper.set_bounds(vmin, vmax)
TickHelper.set_data_interval(vmin, vmax)
TickHelper.set_view_interval(vmin, vmax)
class matplotlib.ticker.Formatter

Bases: matplotlib.ticker.TickHelper

Convert the tick location to a string


some classes may want to replace a hyphen for minus with the proper unicode symbol as described here. The default is to do nothing

Note, if you use this method, eg in :meth`format_data` or call, you probably don’t want to use it for format_data_short() since the toolbar uses this for interative coord reporting and I doubt we can expect GUIs across platforms will handle the unicode correctly. So for now the classes that override fix_minus() should have an explicit format_data_short() method


return a short string version

class matplotlib.ticker.FixedFormatter(seq)

Bases: matplotlib.ticker.Formatter

Return fixed strings for tick labels

seq is a sequence of strings. For positions i < len(seq) return seq[i] regardless of x. Otherwise return ‘’

class matplotlib.ticker.NullFormatter

Bases: matplotlib.ticker.Formatter

Always return the empty string

class matplotlib.ticker.FuncFormatter(func)

Bases: matplotlib.ticker.Formatter

User defined function for formatting

class matplotlib.ticker.FormatStrFormatter(fmt)

Bases: matplotlib.ticker.Formatter

Use a format string to format the tick

class matplotlib.ticker.ScalarFormatter(useOffset=True, useMathText=False)

Bases: matplotlib.ticker.Formatter

Tick location is a plain old number. If useOffset==True and the data range is much smaller than the data average, then an offset will be determined such that the tick labels are meaningful. Scientific notation is used for data < 10^-n or data >= 10^m, where n and m are the power limits set using set_powerlimits((n,m)). The defaults for these are controlled by the axes.formatter.limits rc parameter.


use a unicode minus rather than hyphen


return a formatted string representation of a number


return a short formatted string representation of a number


Return scientific notation, plus offset


set the locations of the ticks


Sets size thresholds for scientific notation.

e.g. formatter.set_powerlimits((-3, 4)) sets the pre-2007 default in which scientific notation is used for numbers less than 1e-3 or greater than 1e4. See also set_scientific().


True or False to turn scientific notation on or off see also set_powerlimits()

class matplotlib.ticker.LogFormatter(base=10.0, labelOnlyBase=True)

Bases: matplotlib.ticker.Formatter

Format values for log axis;

if attribute decadeOnly is True, only the decades will be labelled.

base is used to locate the decade tick, which will be the only one to be labeled if labelOnlyBase is False


change the base for labeling - warning: should always match the base used for LogLocator


return a short formatted string representation of a number


switch on/off minor ticks labeling

pprint_val(x, d)
class matplotlib.ticker.LogFormatterExponent(base=10.0, labelOnlyBase=True)

Bases: matplotlib.ticker.LogFormatter

Format values for log axis; using exponent = log_base(value)

base is used to locate the decade tick, which will be the only one to be labeled if labelOnlyBase is False

class matplotlib.ticker.LogFormatterMathtext(base=10.0, labelOnlyBase=True)

Bases: matplotlib.ticker.LogFormatter

Format values for log axis; using exponent = log_base(value)

base is used to locate the decade tick, which will be the only one to be labeled if labelOnlyBase is False

class matplotlib.ticker.Locator

Bases: matplotlib.ticker.TickHelper

Determine the tick locations;

Note, you should not use the same locator between different Axis because the locator stores references to the Axis data and view limits


autoscale the view limits


Pan numticks (can be positive or negative)


raise a RuntimeError if Locator attempts to create more than MAXTICKS locs


refresh internal information based on current lim

view_limits(vmin, vmax)

select a scale for the range from vmin to vmax

Normally This will be overridden.


Zoom in/out on axis; if direction is >0 zoom in, else zoom out

class matplotlib.ticker.IndexLocator(base, offset)

Bases: matplotlib.ticker.Locator

Place a tick on every multiple of some base number of points plotted, eg on every 5th point. It is assumed that you are doing index plotting; ie the axis is 0, len(data). This is mainly useful for x ticks.

place ticks on the i-th data points where (i-offset)%base==0

class matplotlib.ticker.FixedLocator(locs, nbins=None)

Bases: matplotlib.ticker.Locator

Tick locations are fixed. If nbins is not None, the array of possible positions will be subsampled to keep the number of ticks <= nbins +1. The subsampling will be done so as to include the smallest absolute value; for example, if zero is included in the array of possibilities, then it is guaranteed to be one of the chosen ticks.

class matplotlib.ticker.NullLocator

Bases: matplotlib.ticker.Locator

No ticks

class matplotlib.ticker.LinearLocator(numticks=None, presets=None)

Bases: matplotlib.ticker.Locator

Determine the tick locations

The first time this function is called it will try to set the number of ticks to make a nice tick partitioning. Thereafter the number of ticks will be fixed so that interactive navigation will be nice

Use presets to set locs based on lom. A dict mapping vmin, vmax->locs

view_limits(vmin, vmax)

Try to choose the view limits intelligently

class matplotlib.ticker.LogLocator(base=10.0, subs=[1.0], numdecs=4)

Bases: matplotlib.ticker.Locator

Determine the tick locations for log axes

place ticks on the location= base**i*subs[j]


set the base of the log scaling (major tick every base**i, i integer)


set the minor ticks the log scaling every base**i*subs[j]

view_limits(vmin, vmax)

Try to choose the view limits intelligently

class matplotlib.ticker.AutoLocator

Bases: matplotlib.ticker.MaxNLocator

class matplotlib.ticker.MultipleLocator(base=1.0)

Bases: matplotlib.ticker.Locator

Set a tick on every integer that is multiple of base in the view interval

view_limits(dmin, dmax)

Set the view limits to the nearest multiples of base that contain the data

class matplotlib.ticker.MaxNLocator(*args, **kwargs)

Bases: matplotlib.ticker.Locator

Select no more than N intervals at nice locations.

Keyword args:

Maximum number of intervals; one less than max number of ticks.
Sequence of nice numbers starting with 1 and ending with 10; e.g., [1, 2, 4, 5, 10]
If True, ticks will take only integer values.
If True, autoscaling will result in a range symmetric about zero.
[‘lower’ | ‘upper’ | ‘both’ | None] Remove edge ticks – useful for stacked or ganged plots where the upper tick of one axes overlaps with the lower tick of the axes above it. If prune==’lower’, the smallest tick will be removed. If prune==’upper’, the largest tick will be removed. If prune==’both’, the largest and smallest ticks will be removed. If prune==None, no ticks will be removed.
bin_boundaries(vmin, vmax)
view_limits(dmin, dmax)