Matplotlib でビンのサイズを手動で設定する方法

  1.  hist() 関数へのパラメーターとしてのビンの境界
  2. 希望する幅からビンの数を計算します

Matplotlib でヒストグラムを描画するには、ビンの数 n がパラメーターとして渡される hist2d() 関数を使用します。必要なサイズを維持するために必要なビンの数を計算することにより、ビンのサイズを設定できます。

 hist() 関数へのパラメーターとしてのビンの境界

hist 関数の構文:

hist (x,
      bins: NoneType=None,
      range: NoneType=None,
      density: NoneType=None,
      weights: NoneType=None,
      cumulative: bool=False,
      bottom: NoneType=None,
      histtype: str=builtins.str,
      align: str=builtins.str,
      orientation: str=builtins.str,
      rwidth: NoneType=None,
      log: bool=False,
      color: NoneType=None,
      label: NoneType=None,
      stacked: bool=False,
      normed: NoneType=None,
      data: NoneType=None,
      **kwargs)

Matplotlib でビンのサイズを設定するには、ビンの数ではなく、ビンの境界を持つリストを bin パラメーターとして渡します。

import numpy as np
import numpy.random as random
import matplotlib.pyplot as plt

data = np.random.random_sample(100) * 100.0
plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 60, 80, 100])
plt.xlabel('Value')
plt.ylabel('Counts')
plt.title('Histogram Plot of Data')
plt.grid(True)
plt.show()

Matplotlib 受け渡しリストのビンのサイズをパラメーターとして設定する

上記の例では、ビンの境界と間接的にビンの幅を手動で設定しました。np.arange を使用して等間隔の境界を見つけることもできます

ビンを等間隔にするには、np.arange を使用して等間隔の境界を見つけます

import numpy as np
import numpy.random as random
import matplotlib.pyplot as plt

binwidth=10
data = np.random.random_sample(100) * 100.0
plt.hist(data, bins=np.arange(min(data), max(data) + binwidth, binwidth))
plt.xlabel('Data')
plt.ylabel('Counts')
plt.title('Histogram Plot of Data')
plt.grid(True)
plt.show()

Matplotlib 内の均等に分散されたビン、リストをパラメーターとして渡す

警告

np.arange(start、stop、step) によって作成された間隔には start が含まれるため、np.arange の 2 番目のパラメーターは max(data)+ binwidth になりますが、max(data) にはなりません stop を除外します。したがって、max(data) として実際の停止を行うには、max(data) に間隔 binwidth を追加する必要があります。

希望する幅からビンの数を計算します

ビンの数を見つけるには、希望のビンの幅で割った(「最大値-最小値」)の上限を計算します。

import numpy as np
import matplotlib.pyplot as plt

def find_bins(observations, width):
    minimmum = np.min(observations)
    maximmum = np.max(observations)
    bound_min = -1.0 * (minimmum % width - minimmum)
    bound_max = maximmum - maximmum % width + width
    n = int((bound_max - bound_min) / width) + 1
    bins = np.linspace(bound_min, bound_max, n)
    return bins

data = np.random.random_sample(120) * 100
bins = find_bins(data, 10.0)
plt.hist(data, bins=bins)
plt.xlabel('Data')
plt.ylabel('Counts')
plt.title('Histogram Plot')
plt.show() 

与えられた幅からビンの数を見つける

関連記事 - Matplotlib Histogram

  • Matplotlib で 2つのヒストグラムを同時にプロットする方法
  • comments powered by Disqus