Soweit ich weiß, bezieht sich die Option Log = True in der Histogrammfunktion nur auf die Y-Achse.
P.hist(d,bins=50,log=True,alpha=0.5,color='b',histtype='step')
Ich möchte, dass die Behälter in log10 gleichmäßig verteilt sind. Gibt es etwas, das das kann?
verwenden Sie logspace (), um eine geometrische Sequenz zu erstellen, und übergeben Sie sie an den Parameter bins. Legen Sie die Skalierung der X-Achse auf Log-Skala fest.
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()
Der direkteste Weg ist, einfach das log10 der Grenzwerte zu berechnen, linear beabstandete Bins zu berechnen und dann durch Erhöhen auf die Potenz 10 zurück zu konvertieren:
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()
Der folgende Code gibt an, wie Sie bins='auto'
mit der Protokollskala verwenden können.
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")
Zusätzlich zu dem, was gesagt wurde, funktioniert das auch auf Pandas-Dataframes:
some_column_hist = dataframe['some_column'].plot(bins=np.logspace(-2, np.log10(max_value), 100), kind='hist', loglog=True, xlim=(0,max_value))
Ich möchte darauf hinweisen, dass es ein Problem mit der Normalisierung der Behälter geben könnte. Jeder Behälter ist größer als der vorhergehende und muss daher nach seiner Größe geteilt werden, um die Frequenzen vor dem Plotten zu normalisieren. Dies scheint weder meine Lösung noch die Lösung von HYRY zu berücksichtigen.