Python matplotlib restringe a ubicaciones de marca de entero [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Cómo forzar el eje Y para usar solo enteros en Matplotlib? 3 respuestas

Muy a menudo quiero hacer un gráfico de barras de los recuentos. Si los recuentos son bajos, a menudo obtengo ubicaciones de ticks mayores y / o menores que no son enteros. ¿Cómo puedo prevenir esto? No tiene sentido tener un tick en 1.5 cuando los datos son importantes.

Este es mi primer intento:

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))

que funciona bien cuando los conteos son pequeños pero cuando son grandes, recibo muchas garrapatas menores:

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))

¿Cómo puedo obtener el comportamiento deseado del primer ejemplo con pequeños recuentos y evitar lo que sucede en el segundo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta