2011-07-28 23 views
56

據我所知,直方圖函數中的Log = True選項僅指y軸。如何在Python直方圖中使用對數格

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

我需要bin10在log10中被等距分隔。有什麼可以做到這一點?

+0

你必須,如果你這樣做分箱寬度除以計每個倉! – Peaceful

回答

90

使用logspace()創建幾何序列,並將其傳遞給bin參數。並將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,...)'將創建一個範圍從'10 ** 0.1'到'10 ** 1.0',而不是從'0.1'到'1.0' –

+11

應該是'np .logspace(np.log10(0.1),np.log10(1.0),50)' – OrangeSherbet

13

最直接的方式就是計算的極限日誌10,計算線性間隔箱,然後通過提高至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

除了什麼規定,對大熊貓進行這種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)) 

我會提醒的是,可能存在正常化垃圾箱的問題。每個箱子都比前一個箱子大,因此必須除以它的大小以便在繪圖之前對頻率進行歸一化,似乎我的解決方案和HYRY的解決方案都不能解釋這一點。

來源:https://arxiv.org/pdf/cond-mat/0412004.pdf