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

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

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

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



답변

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

여기에 이미지 설명 입력


답변

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


답변

다음 코드는 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")

차트


답변

명시된 것 외에도 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


답변