numpyでヒストグラムの最大地点を取得する関数


meanでもmedianでもなくhmaxを取得したい時がある。

関数

def hmax(x, bins=20):
    import numpy as np
    hist, bins = np.histogram(x, density=True, bins=20)
    delta = (bins[1]-bins[0])/2
    xr = np.linspace(np.min(bins)+delta,np.max(bins)-delta,len(bins)-1)
    return xr[np.argmax(hist)]

プロット

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
%matplotlib inline
plt.rcParams['font.size']=15

x = np.random.beta(2,5,100000)
df_plot = pd.DataFrame(fit.extract()['mu'])
c = sns.color_palette('husl',3)
sns.distplot(x,color='gray')
plt.axvline(x=np.mean(x),label='mean',color=c[0])
plt.axvline(x=np.median(x),label='median',color=c[1])
plt.axvline(hmax(x),label='hmax',color=c[2])
plt.legend()
plt.show()