J'essaie de créer un histogramme d'une colonne de données et de le tracer de façon logarithmique (y-axis
) Et je ne sais pas pourquoi le code suivant ne fonctionne pas:
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()
J'ai également essayé au lieu de plt.yscale('log')
d'ajouter Log=true
Dans la ligne plt.hist
Et j'ai également essayé ax.set_yscale('log')
, mais rien ne semble fonctionner. Je reçois soit un tracé vide, soit le y-axis
Est en effet logarithmique (avec le code comme indiqué ci-dessus), mais il n'y a pas de données tracées (pas de bacs).
essayer
plt.yscale('log', nonposy='clip')
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.yscale
Le problème est que le bas des barres est à y = 0 et la valeur par défaut est de masquer les points non valides (log(0)
-> non défini) lors de la transformation du journal (il a été question de changer cela, mais Je ne me souviens pas dans quelle direction cela s'est passé) donc quand il essaie de dessiner les rectangles pour votre graphique à barres, le bord inférieur est masqué -> pas de rectangles.
np.logspace renvoie des bacs dans [1-10]
, espacé logarithmiquement - dans mon cas xx est un npvecteur> 0 donc le code suivant fait l'affaire
logbins=np.max(xx)*(np.logspace(0, 1, num=1000) - 1)/9
hh,ee=np.histogram(xx, density=True, bins=logbins)