python - graficos - ¿Cómo forzar al eje Y para que solo use números enteros en Matplotlib?
matplotlib python 3 (3)
Aquí hay otra manera:
from matplotlib.ticker import MaxNLocator
ax = plt.figure().gca()
ax.yaxis.set_major_locator(MaxNLocator(integer=True))
Estoy trazando un histograma usando el módulo matplotlib.pyplot y me pregunto cómo puedo forzar a las etiquetas del eje y para que solo muestren números enteros (por ejemplo, 0, 1, 2, 3, etc.) y no decimales (por ejemplo, 0., 0.5 , 1., 1.5, 2. etc.).
Estoy mirando las notas de orientación y sospecho que la respuesta está en algún lugar alrededor de matplotlib.pyplot.ylim pero hasta ahora solo puedo encontrar cosas que establezcan los valores mínimo y máximo del eje 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 tienes los datos y
y = [0., 0.5, 1., 1.5, 2., 2.5]
Puede usar los valores máximo y mínimo de estos datos para crear una lista de números naturales en este rango. Por ejemplo,
import math
print range(math.floor(min(y)), math.ceil(max(y))+1)
rendimientos
[0, 1, 2, 3]
A continuación, puede configurar las y las ubicaciones de marca (y las etiquetas) usando matplotlib.pyplot.yticks :
yint = range(min(y), math.ceil(max(y))+1)
matplotlib.pyplot.yticks(yint)
esto funciona para mí:
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)