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.