基本事項
ヒストグラム
|
Matplotlibヒストグラム (hist)Matplotlib のモジュール Pyplot を使いヒストグラム (度数分布) の作成方法を示します. 目次基本事項概要ヒストグラム (histgram) は,ある範囲内に含まれる個数(度数)を表すプロットで,度数分布とも呼ばれます.統計量を表すプロットでおなじみにものです.matplotlib.pyplot.hist を使うと,簡単にヒストグラムが作成できます. とりあえずプロット001 # -*- coding:utf-8 -*- 002 import numpy as np 003 import matplotlib.pyplot as plt 004 005 # ----- 条件設定 ----- 006 mu, sigma = 2.0, 2.0 007 N = 10000 # サンプル数 008 Nb = 100 # ヒストグラムプロットのビン数 009 min_x, max_x = mu-5*sigma, mu+5*sigma 010 dx = (max_x-min_x)/Nb # ビン幅 011 012 # ----- データ(正規分布乱数)の生成 ----- 013 s = np.random.normal(mu, sigma, N) 014 015 # ----- プロット作成 ----- 016 plt.rcParams["font.size"] = 18 017 fig = plt.figure() 018 fig.subplots_adjust(bottom=0.12) 019 histplt = fig.add_subplot(1,1,1) 020 histplt.tick_params(axis='both', length=10, which='major') 021 histplt.tick_params(axis='both', length=5, which='minor') 022 histplt.set_xlim([min_x, max_x]) 023 histplt.minorticks_on() 024 histplt.hist(s, Nb, range=(min_x, max_x)) 025 026 plt.show() 027 fig.savefig('hist_plot.pdf', orientation='portrait', \ 028 transparent=False, bbox_inches=None, frameon=None) 029 fig.clf() ヒストグラムプロットの例統計の結果も合わせて表示001 # -*- coding:utf-8 -*- 002 import numpy as np 003 import matplotlib.pyplot as plt 004 005 # ----- 条件設定 ----- 006 mu, sigma = 2.0, 2.0 007 N = 10000 # サンプル数 008 Nb = 100 # ヒストグラムプロットのビン数 009 min_x, max_x = mu-5*sigma, mu+5*sigma 010 dx = (max_x-min_x)/Nb # ビン幅 011 012 # ----- データ(正規分布乱数)の生成 ----- 013 s = np.random.normal(mu, sigma, N) 014 015 # ----- プロット作成 ----- 016 plt.rcParams["font.size"] = 18 017 fig = plt.figure() 018 fig.subplots_adjust(bottom=0.12) 019 histplt = fig.add_subplot(1,1,1) 020 histplt.tick_params(axis='both', length=10, which='major') 021 histplt.tick_params(axis='both', length=5, which='minor') 022 histplt.set_xlim([min_x, max_x]) 023 histplt.minorticks_on() 024 histplt.hist(s, Nb, range=(min_x, max_x)) 025 026 plt.show() 027 fig.savefig('hist_plot.pdf', orientation='portrait', \ 028 transparent=False, bbox_inches=None, frameon=None) 029 fig.clf() 複数のヒストグラム001 # -*- coding:utf-8 -*- 002 import numpy as np 003 import matplotlib.pyplot as plt 004 005 006 # ----- データ(正規分布乱数)の生成 ----- 007 s = [np.random.normal(-2, 2, 10000), \ 008 np.random.normal(2, 2, 3000),\ 009 np.random.normal(5, 0.5, 2000)] 010 011 # ----- プロット作成 ----- 012 min_x, max_x = -10, 10 013 014 plt.rcParams["font.size"] = 18 015 fig = plt.figure() 016 fig.subplots_adjust(bottom=0.12) 017 histplt = fig.add_subplot(1,1,1) 018 histplt.tick_params(axis='both', length=10, which='major') 019 histplt.tick_params(axis='both', length=5, which='minor') 020 histplt.set_xlim([min_x, max_x]) 021 histplt.minorticks_on() 022 kwargs = {'edgecolor':(1,1,1,0)} 023 histplt.hist(s, bins=50, color=['r', 'g', 'b'], range=(min_x, max_x), **kwargs) 024 025 plt.show() 026 fig.savefig('multi_dist.pdf', orientation='portrait', \ 027 transparent=False, bbox_inches=None, frameon=None) 028 fig.clf() 分布図とヒストグラム001 # -*- coding:utf-8 -*- 002 import numpy as np 003 import matplotlib.pyplot as plt 004 from scipy.stats import gaussian_kde 005 006 # ----- プロットデータの作成 ----- 007 Nd = 5000 # データ数 008 Nb = 100 # ビンの数 009 min_x, max_x = min_y, max_y = -10, 10 010 x0 = np.random.normal(0, 2, Nd) 011 y0 = np.random.normal(0, 2, Nd)-x0**2+7 012 x = x0*np.cos(np.pi/4) + y0*np.sin(np.pi/4) 013 y = -x0*np.sin(np.pi/4) + y0*np.cos(np.pi/4) 014 015 # ----- プロットの設定 ----- 016 sc_bottom = sc_left = 0.1 017 sc_width = sc_height = 0.65 018 space = 0.01 019 hst_height = 0.2 020 max_hist = 200 021 022 # ----- プロットの作成準備 ----- 023 fig = plt.figure(1, figsize=(8, 8)) 024 plt.rcParams["font.size"] = 18 025 026 # ----- 色付き散布図 ----- 027 PltScatter = plt.axes([0.1, 0.1, 0.65, 0.65]) 028 xy = np.vstack([x,y]) 029 z = gaussian_kde(xy)(xy) 030 idx = z.argsort() 031 x, y, z = x[idx], y[idx], z[idx] 032 PltScatter.set_xlim(-10, 10) 033 PltScatter.set_ylim(-10, 10) 034 PltScatter.tick_params(axis='both', length=10, which='major') 035 PltScatter.tick_params(axis='both', length=5, which='minor') 036 PltScatter.minorticks_on() 037 PltScatter.scatter(x, y, c=z, marker='o', s=10, edgecolor='') 038 039 # ----- 度数分布(上)のプロット ----- 040 PltHistx = plt.axes([sc_left, sc_bottom + sc_height + space,\ 041 sc_width, hst_height]) 042 PltHistx.set_ylim(0, max_hist) 043 PltHistx.set_xticklabels([]) 044 PltHistx.set_yticklabels([]) 045 PltHistx.hist(x, bins=Nb, histtype='stepfilled', range=(min_x, max_x)) 046 047 # ----- 度数分布(左)のプロット ----- 048 PltHisty = plt.axes([sc_left + sc_width + space, sc_bottom,\ 049 hst_height, sc_width]) 050 PltHisty.set_xlim(0, max_hist) 051 PltHisty.set_xticklabels([]) 052 PltHisty.set_yticklabels([]) 053 PltHisty.hist(y, bins=Nb, histtype='stepfilled', range=(min_x, max_x), \ 054 orientation='horizontal') 055 056 # ----- プロットの表示とファイルの保存 ----- 057 plt.show() 058 fig.savefig('scatter_hist.pdf', orientation='portrait', \ 059 transparent=False, bbox_inches=None, frameon=None) 060 fig.clf() matplotlib の hist のより深い情報ここでは,hist() の引数の説明を行います.詳細は「matplotlib.pyplot.hist — Matplotlib 2.0.2.post4657+g225a4a0 documentation」にかかれており,これを適当に訳し,筆者なりの解説を追加しています. matplotlib.pyplot.hist( x, bins=None, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, hold=None, data=None, **kwargs) 引数
戻り値
ページ作成情報参考資料
更新履歴
|