Как заставить ось Y использовать только целые числа в Matplotlib?

Я строю гистограмму, используя matplotlib.модуль pyplot, и мне интересно, как я могу заставить метки оси y показывать только целые числа (например, 0, 1, 2, 3 и т. д.), а не десятичные дроби (например, 0., 0.5, 1., 1.5, 2. так далее.).

Я смотрю на инструкции и подозреваю, что ответ лежит где-то около библиотек matplotlib.pyplot.ylim но пока я могу найти только то, что устанавливает минимальные и максимальные значения оси Y.

def doMakeChart(item, x):
    if len(x)==1:
        return
    filename = "C:Usersmemaxbyte3charts"
    bins=logspace(0.1, 10, 100)
    plt.hist(x, bins=bins, facecolor='green', alpha=0.75)
    plt.gca().set_xscale("log")
    plt.xlabel('Size (Bytes)')
    plt.ylabel('Count')
    plt.suptitle(r'Normal Distribution for Set of Files')
    plt.title('Reference PUID: %s' % item)
    plt.grid(True)
    plt.savefig(filename + item + '.png')
    plt.clf()

3 ответов


если у вас есть y-data

y = [0., 0.5, 1., 1.5, 2., 2.5]

вы можете использовать максимальные и минимальные значения этих данных для создания списка натуральных чисел в этом диапазоне. Например,

import math
print range(math.floor(min(y)), math.ceil(max(y))+1)

доходность

[0, 1, 2, 3]

затем вы можете установить местоположения y-меток (и метки) с помощью библиотек matplotlib.pyplot.yticks:

yint = range(min(y), math.ceil(max(y))+1)

matplotlib.pyplot.yticks(yint)

вот еще один способ:

from matplotlib.ticker import MaxNLocator

ax = plt.figure().gca()
ax.yaxis.set_major_locator(MaxNLocator(integer=True))

это работает для меня:

import matplotlib.pyplot as plt
plt.hist(...

# make the y ticks integers, not floats
yint = []
locs, labels = plt.yticks()
for each in locs:
    yint.append(int(each))
plt.yticks(yint)