資料分組
將量化值分組到連續的、不重疊的區間中,就像在直方圖中一樣。(另請參閱 Observable Plot 的 bin 轉換。)
bin()
const bin = d3.bin().value((d) => d.culmen_length_mm);
範例 · 來源 · 建構一個具有預設設定的新 bin 產生器。傳回的 bin 產生器支援方法串接,因此此建構函式通常與 bin.value 串接以指定值存取器。傳回的產生器也是一個函式;傳遞資料給它以進行分組。
bin(data)
const bins = d3.bin().value((d) => d.culmen_length_mm)(penguins);
將給定的 data 樣本的 iterable 分組。傳回一個 bin 陣列,其中每個 bin 都是一個包含輸入 data 中關聯元素的陣列。因此,bin 的length
是該 bin 中元素的數量。每個 bin 還有兩個額外的屬性
x0
- 區間的下界(包含)。x1
- 區間的上界(不包含,最後一個區間除外)。
給定 data 中的任何空值或不可比較值,或在 網域 之外的值,都會被忽略。
bin.value(value)
const bin = d3.bin().value((d) => d.culmen_length_mm);
如果指定 value,則將值存取器設定為指定的函式或常數,並傳回此區間產生器。
bin.value() // (d) => d.culmen_length_mm
如果未指定 value,則傳回目前的存取器,預設為身分函式。
當區間 產生 時,會針對輸入資料陣列中的每個元素呼叫值存取器,並傳遞元素 d
、索引 i
和陣列 data
作為三個引數。預設值存取器假設輸入資料是可以排序的(可比較),例如數字或日期。如果資料不是,則應指定存取器,以傳回給定資料對應的可排序值。
這類似於在呼叫區間產生器之前將資料對應到值,但好處是輸入資料會與傳回的區間保持關聯,因此更容易存取資料的其他欄位。
bin.domain(domain)
const bin = d3.bin().domain([0, 1]);
如果指定 domain,則將網域存取器設定為指定的函式或陣列,並傳回此區間產生器。
bin.domain() // [0, 1]
如果未指定 domain,則傳回目前的網域存取器,預設為 extent。區間網域定義為陣列 [min, max],其中 min 是可觀察到的最小值,而 max 是可觀察到的最大值;兩個值都包含在內。當區間 產生 時,此網域外的任何值都會被忽略。
例如,若要使用具有 線性比例 x
的區間產生器,可以這樣說
const bin = d3.bin().domain(x.domain()).thresholds(x.ticks(20));
然後可以這樣從數字陣列計算區間
const bins = bin(numbers);
如果使用預設 extent 網域,且 閾值 指定為計數(而不是明確值),則計算出的網域將會 niced,以使所有區間寬度均勻。
請注意,網域存取器會在具體化陣列的值上呼叫,而不是在輸入資料陣列上。
bin.thresholds(thresholds)
const bin = d3.bin().thresholds(20);
如果將thresholds指定為數字,則網域將均勻地分成大約這麼多個區間;請參閱刻度。
const bin = d3.bin().thresholds([0.25, 0.5, 0.75]);
如果將thresholds指定為陣列,則將閾值設定為指定值並傳回此區間產生器。閾值定義為值陣列 [x0, x1, …]。任何小於x0的值都將放入第一個區間;任何大於或等於x0但小於x1的值都將放入第二個區間;依此類推。因此,產生的區間將有thresholds.length + 1 個區間。任何超出網域的閾值都將被忽略。第一個bin.x0 永遠等於最小網域值,最後一個bin.x1 永遠等於最大網域值。
const bin = d3.bin().thresholds((values) => [d3.median(values)]);
如果將thresholds指定為函式,則該函式將傳遞三個引數:從資料衍生的輸入值陣列,以及表示為min 和max 的網域。然後,函式可以傳回數字閾值的陣列或區間數量;在後一種情況下,網域將均勻地分成大約count 個區間;請參閱刻度。例如,您可能想在對時間序列資料進行分組時使用時間刻度;請參閱範例。
bin.thresholds() // () => [0, 0.5, 1]
如果未指定thresholds,則傳回目前的閾值產生器,預設實作Sturges 公式。(因此,預設情況下,要分組的值必須是數字!)
thresholdFreedmanDiaconis(values, min, max)
const bin = d3.bin().thresholds(d3.thresholdFreedmanDiaconis);
來源 · 傳回根據Freedman–Diaconis 法則計算出的區間數量;輸入值必須是數字。
thresholdScott(values, min, max)
const bin = d3.bin().thresholds(d3.thresholdScott);
原始碼 · 根據 Scott 的常態參考法則 傳回區間數目;輸入的 值 必須是數字。
thresholdSturges(值, 最小值, 最大值)
const bin = d3.bin().thresholds(d3.thresholdSturges);
原始碼 · 根據 Sturges 公式 傳回區間數目;輸入的 值 必須是數字。