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()
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)
Voici une autre façon:
from matplotlib.ticker import MaxNLocator
ax = plt.figure().gca()
ax.yaxis.set_major_locator(MaxNLocator(integer=True))
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)