2011-07-28 21 views
56

ヒストグラム関数のLog = Trueオプションは、y軸のみを参照しています。Pythonヒストグラムに対数ビンを入れる方法

P.hist(d,bins=50,log=True,alpha=0.5,color='b',histtype='step') 

log10でビンを等間隔にする必要があります。これを行うことができるものはありますか?

+0

あなたはビン幅によって各ビンのカウントを分割する必要があります! – Peaceful

答えて

90

ジオメトリシーケンスを作成し、binsパラメータに渡すためにlogspace()を使用します。また、xaxisのスケールをログスケールに設定します。

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() 

enter image description here

+15

'np.logspace(0.1,1.0、...)'は '0.1 ** 'から' 10 ** 1.0'までの範囲を '10 ** 0.1'から' 0.1'から '1.0'に変更しないことに注意してください。 –

+11

は' np .logspace(np.log10(0.1)、np.log10(1.0)、50) ' – OrangeSherbet

13

最も直接的な方法は、単に、制限のlog10のを計算する直線離間ビンを計算し、その後、以下のように、10のパワーを上げることにより、バック変換することである。

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() 
としてうまく機能データフレームパンダでこれを実行し、述べたものに加えて

log histogram from .01 to 10 http://i57.tinypic.com/f1z8uu.png

0

some_column_hist = dataframe['some_column'].plot(bins=np.logspace(-2, np.log10(max_value), 100), kind='hist', loglog=True, xlim=(0,max_value)) 

ビンを正規化する際に問題が発生する可能性があるので注意してください。各ビンは前のビンよりも大きいので、プロットする前に周波数を正規化するためにサイズで分けなければなりません。私の解決策も、HYRYの解決策もこれを説明していないようです。

出典:あなたがそうするならばhttps://arxiv.org/pdf/cond-mat/0412004.pdf

関連する問題