python - real - Configuración de una frecuencia relativa en un histograma de matplotlib
matplotlib ejes (2)
O puede usar set_major_formatter
para ajustar la escala del eje y de la siguiente manera:
from matplotlib import ticker as tick
def adjust_y_axis(x, pos):
return x / (len(mydata) * 1.0)
ax.yaxis.set_major_formatter(tick.FuncFormatter(adjust_y_axis))
simplemente llame a adjust_y_axis
como se adjust_y_axis
arriba antes de plt.show()
.
Tengo datos como una lista de flotadores y quiero trazarlos como un histograma. La función Hist () hace el trabajo perfectamente para trazar el histograma absoluto. Sin embargo, no puedo averiguar cómo representarlo en un formato de frecuencia relativa; me gustaría tenerlo como una fracción o, idealmente, como un porcentaje en el eje y.
Aquí está el código:
fig = plt.figure()
ax = fig.add_subplot(111)
n, bins, patches = ax.hist(mydata, bins=100, normed=1, cumulative=0)
ax.set_xlabel(''Bins'', size=20)
ax.set_ylabel(''Frequency'', size=20)
ax.legend
plt.show()
Pensé que normed = 1 argumento lo haría, pero da fracciones que son demasiado altas y algunas veces son mayores que 1. También parecen depender del tamaño del contenedor, como si no estuvieran normalizadas por el tamaño del contenedor o algo. Sin embargo, cuando configuro acumulativo = 1, resume muy bien hasta 1. Entonces, ¿dónde está la trampa? Por cierto, cuando introduzco los mismos datos en Origen y los grafico, me da las fracciones perfectamente correctas. ¡Gracias!
Porque la opción normalizada de hist devuelve la densidad de puntos, por ejemplo, dN / dx
Lo que necesitas es algo así:
# assuming that mydata is an numpy array
ax.hist(mydata, weights=np.zeros_like(data) + 1. / data.size)
# this will give you fractions