web-dev-qa-db-fra.com

Comment forcer l'axe Y à n'utiliser que des entiers dans Matplotlib?

Je trace un histogramme à l'aide du module matplotlib.pyplot et je me demande comment je peux forcer les étiquettes de l'axe y à n'afficher que les entiers (par exemple 0, 1, 2, 3 etc.) et non les décimales (par exemple 0., 0,5 , 1., 1.5, 2. etc.).

Je regarde les notes d'orientation et je soupçonne que la réponse se situe quelque part autour de matplotlib.pyplot.ylim mais jusqu'à présent, je ne peux trouver que des éléments qui définissent les valeurs minimale et maximale de l'axe y.

def doMakeChart(item, x):
    if len(x)==1:
        return
    filename = "C:\Users\me\maxbyte3\charts\\"
    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()
45
Jay Gattuso

Si vous avez les données y

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

Vous pouvez utiliser les valeurs maximale et minimale de ces données pour créer une liste de nombres naturels dans cette plage. Par exemple,

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

les rendements

[0, 1, 2, 3]

Vous pouvez ensuite définir les emplacements des repères y (et les étiquettes) en utilisant matplotlib.pyplot.yticks :

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

matplotlib.pyplot.yticks(yint)
34
Chris

Voici une autre façon:

from matplotlib.ticker import MaxNLocator

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

cela fonctionne pour moi:

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)
6
Ofer Chay