pyplot histograma hist from examples python matplotlib histogram logarithm

histograma - Contenedores logarítmicos del eje y en python



plt hist en python (2)

Intento crear un histograma de una columna de datos y trazarlo logarítmicamente ( y-axis y) y no estoy seguro de por qué el siguiente código no funciona:

import numpy as np import matplotlib.pyplot as plt data = np.loadtxt(''foo.bar'') fig = plt.figure() ax = fig.add_subplot(111) plt.hist(data, bins=(23.0, 23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0)) ax.set_xlim(23.5, 28) ax.set_ylim(0, 30) ax.grid(True) plt.yscale(''log'') plt.show()

También intenté en lugar de plt.yscale(''log'') agregar Log=true en la línea plt.hist y también probé ax.set_yscale(''log'') , pero parece que nada funciona. O bien obtengo un diagrama vacío, o bien el y-axis es de hecho logarítmico (con el código como se muestra arriba), pero no hay datos trazados (no hay contenedores).


np.logspace devuelve contenedores en [1-10] , espaciados logarítmicamente - en mi caso xx es un npvector> 0 por lo que el siguiente código hace el truco

logbins=np.max(xx)*(np.logspace(0, 1, num=1000) - 1)/9 hh,ee=np.histogram(xx, density=True, bins=logbins)


tratar

plt.yscale(''log'', nonposy=''clip'')

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.yscale

El problema es que la parte inferior de las barras está en y = 0 y el valor predeterminado es enmascarar los puntos válidos ( log(0) -> undefined) al hacer la transformación del registro (hubo una discusión sobre cómo cambiar esto, pero no lo hago) Recuerdo por dónde iba), así que cuando intenta dibujar los rectángulos para su gráfico de barras, el borde inferior queda enmascarado -> sin rectángulos.