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 muss die Behälter in log10 gleichmäßig verteilen. Gibt es etwas, das das kann?
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 muss die Behälter in log10 gleichmäßig verteilen. Gibt es etwas, das das kann?
Antworten:
Verwenden Sie logspace (), um eine geometrische Sequenz zu erstellen und an den Parameter bins zu übergeben. Stellen Sie die xaxis-Skala auf logarithmische Skalierung ein.
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()
np.logspace(0.1,1.0,...)
ein Bereich von 10**0.1
bis 10**1.0
, nicht von 0.1
bis erstellt wird1.0
np.logspace(np.log10(0.1),np.log10(1.0),50)
Der direkteste Weg besteht darin, nur das log10 der Grenzwerte zu berechnen, linear beabstandete Bins zu berechnen und dann durch Erhöhen auf die Potenz 10 wie folgt zurückzurechnen:
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()
Zusätzlich zu den Angaben funktioniert dies auch für Pandas-Datenrahmen:
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 würde darauf hinweisen, dass es ein Problem mit der Normalisierung der Behälter geben könnte. Jeder Behälter ist größer als der vorherige und muss daher durch seine Größe geteilt werden, um die Frequenzen vor dem Plotten zu normalisieren, und es scheint, dass weder meine Lösung noch die Lösung von HYRY dies berücksichtigen.