ヒストグラムの描画をmatplotlibでマスターする

今回はmatplotlibでヒストグラムを生成する方法を見ていきましょう。matplotlib.pyplotクラスには、histが用意されており、誰でも簡単に描画することができます。

今回は公式のドキュメントを参考に進めていきます。

参考 pyplot.histMatplotlib 1.5.1 documentation

基本的なヒストグラムの描画方法

コピペですぐに使えるシンプルなヒストグラムの描画コードはこちらです。numpyで数値を生成するやり方についてはこちらの記事をご覧ください!
numpyのrandomで生成できる乱数を総まとめ

Python
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
 
# 平均50, 標準偏差10 の正規乱数を1,000件生成する
x = np.random.normal(50, 10, 1000)
 
# ヒストグラムを出力
plt.hist(x)


すぐに使える!主要な引数まとめ表

x ヒストグラムを作成するための生データの配列。(必須)
bins ビン(表示する棒)の数。階級数。デフォルト値: 10
range ビンの最小値と最大値を指定。
デフォルト値: x.min(), x.max()
normed True に設定すると正規化(合計値が 1 になるように変換)を実施。デフォルト値: False
cumulative True に設定すると、累積ヒストグラムを出力。デフォルト値: False
bottom 各棒の下側の余白を数値または配列で指定。
histtype ‘bar‘(通常のヒストグラム)、’barstacked’(積み上げヒストグラム)、’step’(線)、’stepfilled’(塗りつぶしありの線) から選択。デフォルト値: ‘bar’
align 各棒の中心を X 軸目盛上のどの横位置で出力するか。 ‘left‘,‘mid‘,‘right‘ から選択。デフォルト値: ‘mid’
orientation 棒の方向。’horizontal’(水平方向)、’vertical’(垂直方向)から選択。デフォルト値: ‘vertical’
rwidth 各棒の幅を数値または、配列で指定。
log True に設定すると、縦軸を対数目盛で表示。
color ヒストグラムの色。配列で指定し、データセット単位で色を指定。
label 凡例を載せる際に使用。
stacked True に設定すると積み上げヒストグラムで出力。False に設定すると、横に並べて出力。

ヒストグラムを調整するサンプル

ここからはさまざまな引数を実際に指定して、どのようにヒストグラムの描画が変わっていくか見ていきましょう。一つ一つ解説していくので、引数早見表では分からないところがあった方はぜひ参考にしてみてください。

棒の数を変更する

ヒストグラムの棒の数は引数でbinsを指定することで変更することができます。

Python
# binsで棒の数を30に指定
plt.hist(x, bins=30)


横軸の上限と下限を指定する

rangeを引数に取ると、横軸の制限を設けることができます。

Python
# rangeで範囲制限を指定
plt.hist(x, range=(30, 100))


合計で1になるように調整する(正規化)

正規化はnormedで指定します。ここでの正規化とは、グラフ内が総計1になるように目盛りが調整されることです。

Python
# normedで正規化
plt.hist(x, normed=True)


累積値を出力する

累積の値を出すこともできます。引数にcumulativeを指定します。

Python
# cumulativeで累積表示
plt.hist(x, cumulative=True)


縦軸を対数目盛で表記する

対数目盛りで表示するには、引数にlogを取ります。

Python
# logで対数目盛り表示
plt.hist(x, log=True)


ヒストグラムのデザインを調整する

ここからは、ヒストグラムを少し見やすくしたり用途に合わせたデザインができる引数を紹介していきます。

棒の幅を調整する

幅の間隔の調整はrwidthを引数に指定します。

Python
# rwidthで棒の幅調整
plt.hist(x, rwidth=0.7)


棒の色を変更する

デフォルトの棒の色は青色ですが、色を変更して描画したい際は、引数にcolorで色名を指定します。

Python
# colorで色を調整
plt.hist(x, color="orange")

MEMO
orangeなどの、指定できるカラーの名前の他にもカラーコードやRGB値での指定も可能です。指定可能なカラーはこちらの記事でまとめているので、合わせてチェックしてみてください!
matplotlibで指定可能な色の名前と一覧をまとめてみた

塗りつぶしナシで線だけ表示する

histtypeで枠線だけを描画することもできます。色を指定すると、枠線の色が変わります。

Python
# 線だけ表示
plt.hist(x, histtype="step", color="orange")


塗りつぶしアリの線で表示する

histtypeで指定すると塗りつぶしアリにも変更することができます。

Python
# 塗りつぶしで表示
plt.hist(x, histtype="stepfilled", color="orange")


棒の位置や方向を調整する

目盛りの場所や、グラフの向きを変更することもできます。引数で簡単に変更できるので、資料の体裁に合わせて編集が必要な時など使ってみてください。

各棒の位置を目盛上の左側(右側)に変える

Python
# 右側はrightで指定
plt.hist(x, align="left")


棒の向きを横方向に変える

横方向の方がしっくりくる可視化図の場合もあります。その際はorientationで指定します。

Python
plt.hist(x, orientation="horizontal")


積み上げヒストグラムを描画する

最後に積み上げヒストグラムの描画方法を見ていきましょう。積み上げを作る方法は2つあるので、順番に紹介していきます。いずれにしても引数で指定します。

積み上げヒストグラムの描画方法 その1

histtype=”barstacked”を指定して積み上げヒストグラムを描画する方法です。

Python
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
 
x = np.random.normal(50, 10, 1000)
y = np.random.normal(30, 20, 2000)
plt.hist([x, y], histtype="barstacked")


積み上げヒストグラムの描画方法 その2

次は、stacked=Trueを引数に指定して描画する方法です。

Python
plt.hist([x, y], stacked=True)


色を調整する

積み上げた2つのグラフの色をそれぞれ調整することもできます。

Python
plt.hist([x, y], stacked=True, color=['orange', 'lightblue'])

MEMO
こちらでもカラーコードやRGBでの指定が可能です。再度関連記事を貼っておくので、チェックしてみてください!
matplotlibで指定可能な色の名前と一覧をまとめてみた

積み上げずに並べて描画する

並列して(積み上げずに)描画することもできます。先ほど積み上げで引数指定したstackedFalseにすることで並列できます。

Python
plt.hist([x, y], stacked=False, color=['orange', 'lightblue'])


凡例を表示する

2つ以上のグラフを出力した際は分かりやすい表記のために、凡例を付けましょう。labelsにリスト形式で指定した順でグラフに凡例が付きます。最後にplt.legend()で描画することができます。

Python
labels = ['v1', 'v2']
plt.hist([x, y], stacked=False, color=['orange', 'lightblue'], label=labels)
plt.legend()


まとめ

ヒストグラムの描画の方法についてまとめました。棒の数や配置の方向に加えて、デザインを修正することもできます。また、積み上げ棒グラフの描画も簡単にできるので、改めてmatplotlibは便利ですね!凡例の表示方法についても、2つ以上のグラフ描画では必須になるので、おさえておきましょう!