Matplotlib を使ったヒストグラムの作成

Beginner

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

はじめに

この実験では、Matplotlib を使って長方形と PolyCollections を使ってヒストグラムを作成する方法を学びます。numpy を使ってランダムなデータを生成し、その後 Matplotlib を使ってデータをヒストグラムとして可視化します。この実験では、Python と Matplotlib の基本的な知識があることを前提としています。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替えて、Jupyter Notebook を使って練習します。

時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題に直面した場合は、Labby にお尋ねください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

必要なライブラリをインポートする

始める前に、必要なライブラリをインポートする必要があります。この実験では Matplotlib と numpy を使用します。新しい Python ファイルを開き、次のコードを追加します。

import matplotlib.pyplot as plt
import numpy as np

乱数シードを設定してデータを生成する

numpy を使って乱数データを生成します。結果を再現可能にするために、乱数シードを設定します。ファイルに次のコードを追加します。

np.random.seed(19680801)
data = np.random.randn(1000)

ヒストグラム用のデータを生成する

これで乱数データが用意できたので、numpy を使ってヒストグラムを生成できます。ヒストグラムを作成するために 50 個のビンを使います。次のコードを追加します。

n, bins = np.histogram(data, 50)

長方形の角を生成する

長方形を使ってヒストグラムを描画するには、各長方形の角を計算する必要があります。次のコードを追加します。

left = bins[:-1]
right = bins[1:]
bottom = np.zeros(len(left))
top = bottom + n

Path オブジェクトを生成してそれからパッチを作成する

次に、Path オブジェクトを生成してそれからパッチを作成します。長方形を使ってヒストグラムを描画するために Path オブジェクトを使用します。次のコードを追加します。

XY = np.array([[left, left, right, right], [bottom, top, top, bottom]]).T
barpath = path.Path.make_compound_path_from_polys(XY)
patch = patches.PathPatch(barpath)
patch.sticky_edges.y[:] = [0]
axs[0].add_patch(patch)
axs[0].autoscale_view()

PathCollection を使ってヒストグラムを描画する

たくさんの Rectangle インスタンスを使う代わりに、PathCollection を使ってヒストグラムを描画する高速な方法を使うことができます。頂点とコードを直接使って複合パスを作成します。次のコードを追加します。

nrects = len(left)
nverts = nrects*(1+3+1)
verts = np.zeros((nverts, 2))
codes = np.ones(nverts, int) * path.Path.LINETO
codes[0::5] = path.Path.MOVETO
codes[4::5] = path.Path.CLOSEPOLY
verts[0::5, 0] = left
verts[0::5, 1] = bottom
verts[1::5, 0] = left
verts[1::5, 1] = top
verts[2::5, 0] = right
verts[2::5, 1] = top
verts[3::5, 0] = right
verts[3::5, 1] = bottom

barpath = path.Path(verts, codes)
patch = patches.PathPatch(barpath)
patch.sticky_edges.y[:] = [0]
axs[1].add_patch(patch)
axs[1].autoscale_view()

ヒストグラムを表示する

最後に、Matplotlib を使ってヒストグラムを表示できます。ファイルに次のコードを追加します。

plt.show()

まとめ

この実験では、Matplotlib を使って長方形と PolyCollection を使ってヒストグラムを作成する方法を学びました。numpy を使ってランダムなデータを生成し、その後 Matplotlib を使ってデータをヒストグラムとして可視化しました。また、たくさんの Rectangle インスタンスを使うよりも高速な方法である PathCollection を使ってヒストグラムを描画する方法も学びました。