Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python matplotlib restrict to integer tick locations

Quite often I want to make a bar chart of counts. If the counts are low I often get major and/or minor tick locations that are not integers. How can I prevent this? It makes no sense to have a tick at 1.5 when the data are counts.

This is my first attempt:

import pylab pylab.figure() ax = pylab.subplot(2, 2, 1) pylab.bar(range(1,4), range(1,4), align='center') major_tick_locs = ax.yaxis.get_majorticklocs() if len(major_tick_locs) < 2 or major_tick_locs[1] - major_tick_locs[0] < 1:     ax.yaxis.set_major_locator(pylab.MultipleLocator(1)) minor_tick_locs = ax.yaxis.get_minorticklocs() if len(minor_tick_locs) < 2 or minor_tick_locs[1] - minor_tick_locs[0] < 1:     ax.yaxis.set_minor_locator(pylab.MultipleLocator(1)) 

which works OK when the counts are small but when they are large, I get many many minor ticks:

import pylab ax = pylab.subplot(2, 2, 2) pylab.bar(range(1,4), range(100,400,100), align='center') major_tick_locs = ax.yaxis.get_majorticklocs() if len(major_tick_locs) < 2 or major_tick_locs[1] - major_tick_locs[0] < 1:     ax.yaxis.set_major_locator(pylab.MultipleLocator(1)) minor_tick_locs = ax.yaxis.get_minorticklocs() if len(minor_tick_locs) < 2 or minor_tick_locs[1] - minor_tick_locs[0] < 1:     ax.yaxis.set_minor_locator(pylab.MultipleLocator(1)) 

How can I get the desired behaviour from the first example with small counts whilst avoiding what happens in the second?

like image 288
Epimetheus Avatar asked Jun 29 '12 08:06

Epimetheus


People also ask

How do I control the number of ticks in MatPlotLib?

Locator_params() function that lets us change the tightness and number of ticks in the plots. This is made for customizing the subplots in matplotlib, where we need the ticks packed a little tighter and limited. So, we can use this function to control the number of ticks on the plots.

How do I limit in MatPlotLib?

MatPlotLib with Python Matplotlib automatically arrives at the minimum and maximum values of variables to be displayed along x, y (and z axis in case of 3D plot) axes of a plot. However, it is possible to set the limits explicitly by using set_xlim() and set_ylim() functions.

How do I skip a tick in MatPlotLib?

Matplotlib removes both labels and ticks by using xticks([]) and yticks([]) By using the method xticks() and yticks() you can disable the ticks and tick labels from both the x-axis and y-axis.


1 Answers

You can use the MaxNLocator method, like so:

    from pylab import MaxNLocator      ya = axes.get_yaxis()     ya.set_major_locator(MaxNLocator(integer=True)) 
like image 78
Florian Mayer Avatar answered Oct 06 '22 21:10

Florian Mayer