はじめに
この実験では、Matplotlib を使ってヒストグラムを描画する方法を学びます。データを生成して簡単なヒストグラムを描画し、ヒストグラムの色を更新し、2 次元ヒストグラムを描画し、ヒストグラムをカスタマイズします。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
データを生成して簡単なヒストグラムを描画する
1 次元のヒストグラムを生成するには、数字の単一のベクトルだけが必要です。2 次元のヒストグラムの場合は、2 番目のベクトルが必要になります。以下で両方を生成し、各ベクトルのヒストグラムを表示します。
import matplotlib.pyplot as plt
import numpy as np
## 再現性のために固定されたシードを持つ乱数生成器を作成する
rng = np.random.default_rng(19680801)
N_points = 100000
n_bins = 20
## 2 つの正規分布を生成する
dist1 = rng.standard_normal(N_points)
dist2 = 0.4 * rng.standard_normal(N_points) + 5
fig, axs = plt.subplots(1, 2, sharey=True, tight_layout=True)
## *bins* キーワード引数を使ってビンの数を設定できます。
axs[0].hist(dist1, bins=n_bins)
axs[1].hist(dist2, bins=n_bins)
plt.show()
ヒストグラムの色を更新する
ヒストグラムメソッドは(他のものとともに)patchesオブジェクトを返します。これにより、描画されたオブジェクトのプロパティにアクセスできます。これを使って、好みのようにヒストグラムを編集できます。各バーの色をその y 値に基づいて変更してみましょう。
## N は各ビンのカウント、bins はビンの下限
N, bins, patches = axs[0].hist(dist1, bins=n_bins)
## 高さで色分けしますが、任意のスカラーを使うこともできます
fracs = N / N.max()
## カラーマップの全範囲に対してデータを 0..1 に正規化する必要があります
norm = colors.Normalize(fracs.min(), fracs.max())
## 次に、オブジェクトをループして、それぞれの色を設定します
for thisfrac, thispatch in zip(fracs, patches):
color = plt.cm.viridis(norm(thisfrac))
thispatch.set_facecolor(color)
## カウントの合計数で入力を正規化することもできます
axs[1].hist(dist1, bins=n_bins, density=True)
## 次に、y 軸をフォーマットしてパーセンテージを表示します
axs[1].yaxis.set_major_formatter(PercentFormatter(xmax=1))
plt.show()
2 次元ヒストグラムを描画する
2 次元ヒストグラムを描画するには、ヒストグラムの各軸に対応する同じ長さの 2 つのベクトルだけが必要です。
fig, ax = plt.subplots(tight_layout=True)
hist = ax.hist2d(dist1, dist2)
plt.show()
ヒストグラムのカスタマイズ
2 次元ヒストグラムをカスタマイズするのは 1 次元の場合と同様で、ビンのサイズや色の正規化などの視覚的なコンポーネントを制御できます。
fig, axs = plt.subplots(3, 1, figsize=(5, 15), sharex=True, sharey=True,
tight_layout=True)
## 各軸のビンの数を増やすことができます
axs[0].hist2d(dist1, dist2, bins=40)
## 色の正規化も定義できます
axs[1].hist2d(dist1, dist2, bins=40, norm=colors.LogNorm())
## 各軸のカスタムなビンの数も定義できます
axs[2].hist2d(dist1, dist2, bins=(80, 10), norm=colors.LogNorm())
plt.show()
まとめ
この実験では、Matplotlib を使ってヒストグラムを描画する方法を学びました。データを生成して簡単なヒストグラムを描画し、ヒストグラムの色を更新し、2 次元ヒストグラムを描画し、ヒストグラムをカスタマイズしました。これらの技術を使って、さまざまなコンテキストでデータを可視化して分析することができます。