Matplotlibのhist()
関数は、データ分布を視覚化する強力なツールを提供します。しかし、デフォルトの自動ビンニングは、重要な詳細を隠したり、誤解を招いたりすることがあります。正確なビンサイズの制御は、正確で洞察力のある視覚化を作成するために不可欠です。この記事では、これを実現するための2つの効果的な方法について説明します。
目次
ビン境界の直接指定
ビンサイズを制御する最も直接的な方法は、hist()
関数のbins
パラメータを使用してビン境界を明示的に定義することです。これにより、各ビンの境界を完全に制御できます。
import matplotlib.pyplot as plt
import numpy as np
# サンプルデータ
data = np.random.randn(1000)
# ビン境界の定義(例:-4から4まで幅0.5のビン)
bin_edges = np.arange(-4, 4.1, 0.5)
# ヒストグラムの作成
plt.hist(data, bins=bin_edges)
plt.xlabel("値")
plt.ylabel("頻度")
plt.title("明示的に定義されたビン境界を持つヒストグラム")
plt.show()
このコードは、-4から4までの幅0.5のビンを持つヒストグラムを生成します。bin_edges
配列は、各ビンの境界を正確に定義します。bin_edges
の最後の値は、最後のビンの上限を設定します。この範囲外のデータポイントは除外されます。データと目的のビン幅を包含するようにbin_edges
を調整してください。
目的の幅からのビンの計算
あるいは、目的のビン幅はわかっているが正確な境界がわかっていない場合は、データの範囲と目的の幅に基づいて必要なビンの数を計算します。Matplotlibは、適切なビン境界を自動的に決定します。
import matplotlib.pyplot as plt
import numpy as np
# サンプルデータ
data = np.random.randn(1000)
# 目的のビン幅
bin_width = 0.5
# ビンの数の計算
data_min = np.min(data)
data_max = np.max(data)
num_bins = int((data_max - data_min) / bin_width)
# ヒストグラムの作成
plt.hist(data, bins=num_bins)
plt.xlabel("値")
plt.ylabel("頻度")
plt.title("ビンの数が計算されたヒストグラム")
plt.show()
# より細かい制御のために、ビン境界を明示的に計算します。
bin_edges = np.linspace(data_min, data_max, num_bins + 1) # 均等な間隔にするためにlinspaceを使用
plt.hist(data, bins=bin_edges)
plt.xlabel("値")
plt.ylabel("頻度")
plt.title("正確に計算されたビン境界を持つヒストグラム")
plt.show()
このコードはまずnum_bins
を計算します。Matplotlibはこれを用いてビン境界を自動的に調整し、すべてのデータポイントが含まれるようにします。2番目の部分は、より正確な制御のためにbin_edges
を計算する方法を示しています。Matplotlibはこれらの境界をわずかに調整することがあります。
これらのいずれかの方法を使用することで、Matplotlibのヒストグラムでのビニングを正確に制御し、より明確で有益なデータ視覚化を実現できます。ニーズと必要な制御レベルに最適な方法を選択してください。