コンテンツにスキップ

データのビニング

ヒストグラムのように、量的値を連続した重複しない区間に分割します。(Observable Plotのbin変換も参照してください。)

bin()

js
const bin = d3.bin().value((d) => d.culmen_length_mm);

· ソース · デフォルト設定で新しいビンジェネレーターを構築します。返されたビンジェネレーターはメソッドチェーンをサポートしているため、このコンストラクターは通常bin.valueとチェーンされて値アクセサーを割り当てます。返されたジェネレーターは関数でもあります。データを渡すとビニングされます。

bin(data)

js
const bins = d3.bin().value((d) => d.culmen_length_mm)(penguins);

指定された反復可能なdataサンプルをビニングします。ビンの配列を返します。各ビンは、入力dataから関連付けられた要素を含む配列です。したがって、ビンのlengthはそのビン内の要素の数です。各ビンには、2つの追加属性があります。

  • x0 - ビンの下限(包含)。
  • x1 - ビンの上限(排他、最後のビンを除く)。

指定されたdata内のnullまたは比較できない値、またはドメイン外の値は無視されます。

bin.value(value)

js
const bin = d3.bin().value((d) => d.culmen_length_mm);

valueが指定されている場合、値アクセサーを指定された関数または定数に設定し、このビンジェネレーターを返します。

js
bin.value() // (d) => d.culmen_length_mm

valueが指定されていない場合、現在の値アクセサーを返します。デフォルトは恒等関数です。

ビンが生成されると、値アクセサーは入力データ配列の各要素に対して呼び出され、要素d、インデックスi、および配列dataの3つの引数が渡されます。デフォルトの値アクセサーは、入力データが数値や日付など、順序付け可能(比較可能)であると想定しています。データが順序付け可能でない場合は、指定されたデータに対応する順序付け可能な値を返すアクセサーを指定する必要があります。

これは、ビンジェネレーターを呼び出す前にデータを値にマッピングするのと似ていますが、入力データが返されたビンに関連付けられたままになるため、データの他のフィールドにアクセスしやすくなるという利点があります。

bin.domain(domain)

js
const bin = d3.bin().domain([0, 1]);

domainが指定されている場合、ドメインアクセサーを指定された関数または配列に設定し、このビンジェネレーターを返します。

js
bin.domain() // [0, 1]

domainが指定されていない場合、現在のドメインアクセサーを返します。デフォルトはextentです。ビンドメインは配列[minmax]として定義されます。ここで、minは最小観測値、maxは最大観測値です。両方の値が含まれます。このドメイン外の値は、ビンが生成されるときに無視されます。

たとえば、線形スケール xでビンジェネレーターを使用するには、次のようにします。

js
const bin = d3.bin().domain(x.domain()).thresholds(x.ticks(20));

次に、数値の配列からビンを次のように計算できます。

js
const bins = bin(numbers);

デフォルトのextentドメインが使用され、しきい値が(明示的な値ではなく)カウントとして指定されている場合、計算されたドメインは適切な値に調整され、すべてのビンの幅が均一になります。

ドメインアクセサーは、入力データ配列ではなく、の具体化された配列に対して呼び出されることに注意してください。

bin.thresholds(thresholds)

js
const bin = d3.bin().thresholds(20);

thresholdsが数値として指定されている場合、ドメインは約 that many ビンに均等に分割されます。目盛りを参照してください。

js
const bin = d3.bin().thresholds([0.25, 0.5, 0.75]);

thresholdsが配列として指定されている場合、しきい値を指定された値に設定し、このビンジェネレーターを返します。しきい値は値の配列[x0x1、…]として定義されます。x0未満の値は最初のビンに配置されます。x0以上x1未満の値は2番目のビンに配置されます。等々。したがって、生成されたビンには、thresholds.length + 1個のビンがあります。ドメイン外のしきい値は無視されます。最初のbin.x0は常に最小ドメイン値と等しく、最後のbin.x1は常に最大ドメイン値と等しくなります。

js
const bin = d3.bin().thresholds((values) => [d3.median(values)]);

thresholdsが関数として指定されている場合、関数には3つの引数が渡されます。データから派生した入力の配列と、minmaxとして表されるドメインです。関数は、数値しきい値の配列またはビンの数を返すことができます。後者の場合、ドメインは約count個のビンに均等に分割されます。目盛りを参照してください。たとえば、時系列データをビニングするときに時間目盛りを使用する場合があります。を参照してください。

js
bin.thresholds() // () => [0, 0.5, 1]

thresholdsが指定されていない場合、現在のしきい値ジェネレーターを返します。デフォルトではスタージェスの公式を実装しています。(したがって、デフォルトでは、ビニングされる値は数値である必要があります!)

thresholdFreedmanDiaconis(values, min, max)

js
const bin = d3.bin().thresholds(d3.thresholdFreedmanDiaconis);

ソース · フリードマン・ダイアコニスの法則に従ってビンの数を返します。入力valuesは数値である必要があります。

thresholdScott(values, min, max)

js
const bin = d3.bin().thresholds(d3.thresholdScott);

ソース · スコットの正規基準則に従ってビンの数を返します。入力valuesは数値である必要があります。

thresholdSturges(values, min, max)

js
const bin = d3.bin().thresholds(d3.thresholdSturges);

ソース · スタージェスの公式に従ってビンの数を返します。入力valuesは数値である必要があります。