파이썬 히스토그램에 로그 빈을 갖는 방법


82

내가 아는 한 히스토그램 함수의 Log = True 옵션은 y 축만을 나타냅니다.

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

log10에서 동일한 간격으로 bin이 필요합니다. 이것을 할 수있는 것이 있습니까?


1
그렇게하려면 각 빈의 개수를 빈 너비로 나눠야합니다!
평화로운

답변:


129

logspace ()를 사용하여 기하학적 시퀀스를 만들고 bins 매개 변수에 전달합니다. 그리고 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()

여기에 이미지 설명 입력


20
노트 np.logspace(0.1,1.0,...)의 범위 만듭니다 10**0.1로를 10**1.0하지에서, 0.11.0
앙드레 HOLZNER

12
해야np.logspace(np.log10(0.1),np.log10(1.0),50)
OrangeSherbet

1
빈 = '자동차'를 사용하는 방법에 대한 내 대답을 참조하십시오
N. MCA를.

20

가장 직접적인 방법은 제한의 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()

log10 간격의 빈


10

다음 코드는 bins='auto'로그 스케일을 사용하는 방법을 나타냅니다 .

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

차트


0

명시된 것 외에도 pandas 데이터 프레임에서이 작업을 수행하는 것도 작동합니다.

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

빈을 정규화하는 데 문제가있을 수 있다는 점에주의하겠습니다. 각 bin은 이전 bin보다 크므로 플로팅하기 전에 주파수를 정규화하려면 크기로 나누어야하며 내 솔루션도 HYRY의 솔루션도이를 설명하지 않는 것 같습니다.

출처 : https://arxiv.org/pdf/cond-mat/0412004.pdf

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.