Python matplotlib ogranicza się do liczb całkowitych zaznaczonych [duplikatów]

To pytanie ma już tutaj odpowiedź:

Jak zmusić oś Y do używania wyłącznie liczb całkowitych w Matplotlib? 3 odpowiedzi

Dość często chcę zrobić wykres słupkowy z licznikami. Jeśli liczba jest niska, często dostaję główne i / lub drobne miejsca, które nie są liczbami całkowitymi. Jak mogę temu zapobiec? Nie ma sensu mieć kleszcza przy 1,5, gdy dane są liczone.

To moja pierwsza próba:

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

co działa poprawnie, gdy liczba jest mała, ale gdy są duże, otrzymuję wiele drobnych znaczników:

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

Jak mogę uzyskać pożądane zachowanie z pierwszego przykładu z małymi liczbami, unikając tego, co dzieje się w drugim?

questionAnswers(3)

yourAnswerToTheQuestion