Matplotlib によるヒストグラムの描画

Beginner

This tutorial is from open-source community. Access the source code

はじめに

この実験では、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 次元ヒストグラムを描画し、ヒストグラムをカスタマイズしました。これらの技術を使って、さまざまなコンテキストでデータを可視化して分析することができます。