Python学習講座

PythonエンジニアによるPython3学習サイト

matplotlib

matplotlib入門 ヒストグラム編


今回はmatplotlibのヒストグラムについてです。
以前ご紹介した棒グラフでも作成は可能なのですが、matplotlibにはhistというヒストグラム用の関数が用意されています。

簡単なヒストグラムを描いてみる

まずはごく簡単なサンプルからです。numpyで0〜1の乱数を100個生成し、10個の階級に分けてヒストグラムを描画してみましょう。

import numpy as np
import matplotlib.pyplot as plt

# 乱数を100個生成します
x = np.random.randn(100)
# 10個の階級でヒストグラムを作成します
n, bins, patches  = plt.hist(x, bins=10)
plt.show()

実行結果

上記コードのコメントに記述したとおり、一番目の引数にリストを、binsに階級数を指定します。また、戻り値のnは各階級における度数、binsが階級のリストとなります。引数で指定したbinsとは異なるので注意してください。自力で計算しなくても度数が算出されるのが便利ですね。

乱数の数を1000個に増やし、引数のbinsに100を指定してみると、以下のようになります。

引数の説明

では、細かい設定について見ていきましょう。すべては紹介しきれないので、よく使うものを抜粋して説明します。
代表的な引数一覧

引数 説明
color 色を設定する
range 横軸方向の出力範囲を設定する
normed 数量の標準化をする
cumulative 累積度数
weigh 指定した傾向に対し、ウェイトをかける

色を設定する

もうおなじみですね。RGBを指定します。

import numpy as np
import matplotlib.pyplot as plt

# 乱数を1000個生成します
x = np.random.randn(1000)

# 色を設定する 
n, bins, patches  = plt.hist(x, bins=10, color='#FFA0A0', alpha=0.8)
plt.show()

実行結果

横軸方向の出力範囲を設定する

特定の範囲だけ出力したい場合に利用します。タプル形式で(最小値, 最大値)を指定します。(冗長なのでimport、plt.show()等は省略します。)以下のサンプルでは、0〜xの最大値まで出力するように設定しています。

n, bins, patches  = plt.hist(x, bins=10, range=(0, x.max()))

実行結果

数量の標準化をする

平均が0で分散が1のデータに変換します。

n, bins, patches  = plt.hist(x, bins=10, normed=True)

実行結果

縦軸の値を見る分かるとおり、度数が標準化されます。

累積度数

累積度数を表示したい場合は、cumulative=Trueを指定します。

n, bins, patches  = plt.hist(x, bins=10, cumulative=True)

実行結果

指定した傾向に対し、ウェイトをかける

最後は、ちょっとわかりづらい機能で、業務上利用したことがないのですが、そのうち役に立ちそうなのでメモしておきます。
以下サンプルでは、絶対値の大きい物に対してウェイトをかけています。効果がわかりやすいように、binの数を100個にしています。

n, bins, patches  = plt.hist(x, bins=100, weights=np.fabs(x))

実行結果

ヒストグラムが左右に割れて、絶対値の大きい区間にウェイトがかかっていることがわかるかと思います。

-matplotlib
-