Autant que je sache, l'option Log = True dans la fonction d'histogramme fait uniquement référence à l'axe des ordonnées.
P.hist(d,bins=50,log=True,alpha=0.5,color='b',histtype='step')
J'ai besoin que les bacs soient équidistants dans log10. Est-ce qu'il y a quelque chose qui peut faire ça?
utilisez logspace () pour créer une séquence géométrique et transmettez-la au paramètre bins. Et définissez l'échelle de xaxis pour enregistrer l'échelle.
import pylab as pl
import numpy as np
data = np.random.normal(size=10000)
pl.hist(data, bins=np.logspace(np.log10(0.1),np.log10(1.0), 50))
pl.gca().set_xscale("log")
pl.show()
La méthode la plus directe consiste à calculer le log10 des limites, à calculer les tranches linéairement espacées, puis à reconvertir en augmentant la puissance à 10, comme ci-dessous:
import pylab as pl
import numpy as np
data = np.random.normal(size=10000)
MIN, MAX = .01, 10.0
pl.figure()
pl.hist(data, bins = 10 ** np.linspace(np.log10(MIN), np.log10(MAX), 50))
pl.gca().set_xscale("log")
pl.show()
Le code suivant indique comment vous pouvez utiliser bins='auto'
avec l'échelle du journal.
import numpy as np
import matplotlib.pyplot as plt
data = 10**np.random.normal(size=500)
_, bins = np.histogram(np.log10(data + 1), bins='auto')
plt.hist(data, bins=10**bins);
plt.gca().set_xscale("log")
En plus de ce qui a été dit, cette opération sur les bases de données de pandas fonctionne également:
some_column_hist = dataframe['some_column'].plot(bins=np.logspace(-2, np.log10(max_value), 100), kind='hist', loglog=True, xlim=(0,max_value))
Je vous préviens qu'il peut y avoir un problème avec la normalisation des bacs. Chaque casier est plus grand que le précédent et doit donc être divisé par sa taille pour normaliser les fréquences avant de tracer, et il semble que ni ma solution, ni la solution de HYRY n'en tiennent compte.