matplotlib の hist

データをプロットして、ヒストを作って、確認する

いつものように、乱数でデータを作って、プロットとヒストとその結果を表示してみる

import matplotlib.pyplot as plt
import numpy as np

def print_bins(n,bins):

    tmp = 'hist data:\n'

    if len(n) != len(bins)-1:
        return "Error not equal n,(bins-1).\n"
    elif len(bins) < 1:
        return "Error bins\n"
    elif len(bins) == 2:
        return tmp + '[{},{}] {}\n'.format(bins[0],bins[1],n[0])

    for st,ed,ct in zip(bins[0:-2],bins[1:],n):
        tmp += '[{:>8.3f},{:>8.3f}) {:>6.0f}\n'.format(st,ed,ct)
    tmp += '[{:>8.3f},{:>8.3f}] {:>6.0f}\n'.format(bins[-2],bins[-1],n[-1])

    return tmp

def print_info(dat):
    tmp = 'info:\n'
    tmp += 'count = {}\n'.format(len(dat))
    tmp += 'min   = {}\n'.format(np.amin(dat))
    tmp += 'max   = {}\n'.format(np.amax(dat))
    tmp += 'mean  = {}\n'.format(np.mean(dat))
    tmp += 'std   = {}\n'.format(np.std(dat))
    tmp += 'var   = {}\n'.format(np.var(dat))
    return tmp

今回は、事前にやりたいことを確認していたので

cnt = 100
dat = np.random.normal(1, 2, cnt)

fig = plt.figure()
fig.dpi = 200 # 200dpi

#fig, ax_lst = plt.subplots(2, 2)
ax1=fig.add_subplot(2,2,1) # row=1,col=2,index=1
ax2=fig.add_subplot(2,2,2) # row=1,col=2,index=2
ax3=fig.add_subplot(2,2,3) # row=1,col=2,index=3
ax4=fig.add_subplot(2,2,4) # row=1,col=2,index=4

x = np.arange(0, cnt)

ax1.set_title("randn({})".format(cnt))
ax1.plot(x,dat)

ax2.set_title("hist")
pHist = ax2.hist(dat,bins=10,orientation='horizontal')

dat_info = print_info(dat)
ax3.tick_params(labelbottom=False,labeltop=False,labelleft=False,labelright=False,
                bottom=False, top=False, left=False, right=False)
ax3.text(0.1,1-0.1,dat_info,size=6,family='monospace',horizontalalignment='left', verticalalignment='top',transform=ax3.transAxes)

hist_text = print_bins(pHist[0],pHist[1])
ax4.tick_params(labelbottom=False,labeltop=False,labelleft=False,labelright=False,
                bottom=False, top=False, left=False, right=False)
ax4.text(0.1,1-0.1,hist_text,size=6,family='monospace',horizontalalignment='left', verticalalignment='top',transform=ax4.transAxes)

plt.show()

f:id:chiyoh:20190624232517p:plain

【解説】左上データをプロット、右上データをヒストプロット、右下ヒストのデータ、左下データの平均値とかいろいろ