Contenedores logarítmicos del eje y en python


Estoy tratando de crear un histograma de una columna de datos y trazarlo logarítmicamente (y-axis) 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 he intentado en lugar de plt.yscale('log') agregar Log=true en la línea plt.hist y también he intentado ax.set_yscale('log'), pero nada parece funcionar. O bien obtengo un gráfico 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).

Author: Hadi, 2013-07-30

2 answers

Intenta

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 in-valid (log(0) -> undefined) al hacer la transformación de registro (hubo discusión sobre cambiar esto, pero no recuerdo de qué manera fue), por lo que cuando intenta dibujar los rectángulos para su gráfico de barras, el borde inferior está enmascarado -> sin rectángulos.

 65
Author: tacaswell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-30 16:50:41

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)
 3
Author: Luca Rigazio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-26 05:25:18