Estoy tratando de crear un histograma de una columna de datos y la parcela es de forma logarítmica (y-axis) y no estoy seguro de por qué el código siguiente 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') la adición de Log=true en el plt.hist línea y también traté de ax.set_yscale('log'), pero nada parece funcionar. Yo tampoco conseguir un terreno baldío, el y-axis es, de hecho, logarítmica (con el código como se muestra arriba), pero no hay datos trazados (ni contenedores de basura).

InformationsquelleAutor mannaroth | 2013-07-30

2 Comentarios

  1. 74

    intentar

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

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

    El problema es con la parte inferior de las barras de ser en y=0 y el valor predeterminado es de enmascarar en puntos válidos (log(0) -> undefined) al hacer el registro de transformación (se habló de cambiar esto, pero no recuerdo cual fue) así que cuando se trata de dibujar los rectángulos para usted gráfico de barras, el borde inferior está enmascarado -> no rectángulos.

    • Gracias por la respuesta. La solución que propone resolver la desaparición de los bares, pero otro «bug», luego de superficie: todas las etiquetas de la y-logarítmica eje se trazan en la parte superior de uno al otro. Este último problema fue resuelto por comentar el «hacha.set_ylim(0, 30)» de la línea.
    • sí, porque el 0 en el límite se fija en algún número muy pequeño para que usted tenga un razonable número de décadas. uso ax.set_ylim(1, 30) lugar.
    • La especificación de nonposy=’clip’ hizo el truco!
  2. 3

    np.logspace devuelve contenedores en [1-10], logarítmicamente espaciados – 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)

Dejar respuesta

Please enter your comment!
Please enter your name here