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).
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.
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)
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