Python matplotlib restringe a localizações de pontos inteiros [duplicados]

Esta questão já tem uma resposta aqui:

Como forçar o eixo Y para usar apenas inteiros no Matplotlib? 3 respostas

Muitas vezes eu quero fazer um gráfico de barras de contagens. Se as contagens forem baixas, muitas vezes eu obtenho locais maiores e / ou menores de escala que não são números inteiros. Como posso evitar isso? Não faz sentido ter um tick em 1.5 quando os dados são contados.

Esta é a minha primeira tentativa:

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

o que funciona bem quando as contagens são pequenas, mas quando são grandes, eu recebo muitos pequenos sinais:

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

Como posso obter o comportamento desejado do primeiro exemplo com pequenas contagens, evitando o que acontece no segundo?

questionAnswers(3)

yourAnswerToTheQuestion