Python PR

【Python】matplotlibでヒストグラムを描画する

記事内に商品プロモーションを含む場合があります

この記事では、Pythonで matplotlib を使ってヒストグラムを描画する方法を解説します。ヒストグラムは、量的データの分布を見るのに用いられます。

基本的な matplotlib の使い方は以下の記事を参照してください。

【Python】matplotlibを使ってグラフを描画する方法を解説この記事では、Python で matplotlib(マットプロットリブ) を使ってグラフを描画する方法を解説します。matplotlib を使うことで簡単にデータを可視化させることができます。それでは、簡単なサンプルを混えて使い方を見ていきましょう!...

それでは、ヒストグラムの使い方を見ていきましょう!

ヒストグラムを描画する

ヒストグラムを描画するには matplotlib.pyplothist() 関数を使います。

import matplotlib.pyplot as plt

plt.hist(x, bins=None, range=None, density=False, weights=None, 
         cumulative=False, bottom=None, histtype='bar', 
         align='mid', orientation='vertical', rwidth=None, 
         log=False, color=None, label=None, stacked=False, 
         *, data=None, **kwargs)

hist() にデータを渡すことで自動的に階級を分けてヒストグラムを作成してくれます。

import matplotlib.pyplot as plt

# データ
d = [1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9, 10, 10, 10]

# ヒストグラムの作成
plt.hist(d)

# 表示
plt.show()

bins を指定することで階級数を指定できます。ちなみに、bins のデフォルトは 10 です。

import matplotlib.pyplot as plt

n = [1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9, 10, 10, 10]

# bins を 5 に指定
plt.hist(n, bins=5)

plt.show()

データが 10種類あって bins が 5つなので 2つの階級のデータがまとめて1つの棒で表現されています。

データの種類以上の bins を指定すると歯抜けになってしまう。1つの棒が表現する値の幅を広くしたいなら少なくし、狭くしたいなら多くします。

import matplotlib.pyplot as plt

n = [1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9, 10, 10, 10]

# bins に 11 を指定
plt.hist(n, bins=11)

# 表示
plt.show()

複数のヒストグラム

ヒストグラムを複数描画するには以下のような方法があります。

ヒストグラムを並べる

複数のデータをリストなどのコレクションでまとめて渡すことで、ヒストグラムを並べて描画できます。

import matplotlib.pyplot as plt
import numpy as np

# 男女別の身長
man = np.random.normal(168.0, 7.1, 100)
woman = np.random.normal(154.5, 7.0, 100)

# コレクションでまとめてデータを渡す
plt.hist([man, woman])

# 表示
plt.show()

積み上げヒストグラム

積み上げヒストグラムを描画するには 複数のデータをリストなどのコレクションでまとめて渡し、stackedTrue を指定することで実現できます。

import matplotlib.pyplot as plt
import numpy as np

# 男女別の身長
man = np.random.normal(168.0, 7.1, 100)
woman = np.random.normal(154.5, 7.0, 100)

# 複数のデータを渡して stacked に True を指定 
plt.hist((man, woman), stacked=True)

# 表示
plt.show()

ヒストグラムを重ねる

複数のヒストグラムを重ねることでデータの特徴を比較したりすることができます。alpha で透明度を指定することで重なっている部分も見やすくすることができる。

以下のコードでは、男女別の身長をヒストグラムで表現しています。

import matplotlib.pyplot as plt
import numpy as np

# 男女別の身長
man = np.random.normal(168.0, 7.1, 100)
woman = np.random.normal(154.5, 7.0, 100)

# alpha を 0.5 に指定
plt.hist(man, alpha=0.5)
plt.hist(woman, alpha=0.5)

# 表示
plt.show()

凡例の表示

凡例を表示するには、ヒストグラムの label を設定してから legend() を呼び出すことで配置できます。

import matplotlib.pyplot as plt
import numpy as np

# 男女別の身長
man = np.random.normal(168.0, 7.1, 100)
woman = np.random.normal(154.5, 7.0, 100)

# label の設定
plt.hist(man, alpha=0.5, label='Man')
plt.hist(woman, alpha=0.5, label='Woman')

# 凡例の配置
plt.legend()

# 表示
plt.show()

ヒストグラムの加工

matplotlib には、グラフを見やすくするために様々なオプションが用意されています。試しに簡単なグラフのオプションを変更してみて、どのようなものがあるか確認していきましょう!

先ほどの簡単なヒストグラムをいじってみます。

import matplotlib.pyplot as plt

# データ
d = [1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9, 10, 10, 10]

# ヒストグラムの作成
plt.hist(d)

# 表示
plt.show()

棒の幅

棒の幅を rwidth で変更できます。

plt.hist(n, rwidth=0.5)

棒の色

棒の色を color で変更できます。

plt.hist(n, color='red')

塗りつぶししない

histtype'step' を指定することで枠線のみにできます。

plt.hist(n, histtype='step')

横向きにする

orientation'horizontal' を指定することで棒の向きを横にできる。

plt.hist(d, orientation='horizontal')

まとめ

この記事では、matplotlib を使ってヒストグラムを描画する方法を解説しました。

ヒストグラムを使うことで量的データの分布を視覚的に捉えることができます。データの量を比較したい場合に使ってみましょう!

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ