跳至內容

頻段比例

頻段比例類似於 序數比例,但輸出範圍是連續且為數字。比例將連續範圍分為均勻的頻段。頻段比例通常用於具有序數或分類維度的長條圖。

scaleBand(網域, 範圍)

範例 · 原始碼 · 建立一個新的頻段比例,具有指定的 網域範圍,沒有 內距、沒有 捨入,以及置中的 對齊

js
const x = d3.scaleBand(["a", "b", "c"], [0, 960]);

如果指定單一參數,則會將其解釋為範圍。如果未指定網域,則預設為空網域。如果未指定範圍,則預設為單位範圍 [0, 1]。

band(value)

範例 · 來源 · 給定輸入網域中的,傳回由輸出範圍衍生的對應頻段的開頭。

js
const x = d3.scaleBand(["a", "b", "c"], [0, 960]);
x("a"); // 0
x("b"); // 320
x("c"); // 640
x("d"); // undefined

如果給定的不在比例尺的網域中,則傳回未定義。

band.domain(domain)

abcdef

範例 · 來源 · 如果指定網域,則將網域設定為指定的值陣列,並傳回此比例尺。

js
const x = d3.scaleBand([0, 960]).domain(["a", "b", "c", "d", "e", "f"]);

網域中的第一個元素將對應到第一個頻段,第二個網域值對應到第二個頻段,依此類推。網域值會在內部儲存在一個從原始值到索引的InternMap中;然後使用產生的索引來確定頻段。因此,頻段比例尺的值必須可以強制轉換為原始值,而原始網域值會唯一識別對應的頻段。如果未指定網域,則此方法會傳回目前的網域。

band.range(range)

範例 · 來源 · 如果指定範圍,則將比例尺的範圍設定為指定的兩個數字元素陣列,並傳回此比例尺。

js
const x = d3.scaleBand().range([0, 960]);

如果給定陣列中的元素不是數字,則會強制轉換為數字。如果未指定範圍,則傳回比例尺目前的範圍,預設為 [0, 1]。

band.rangeRound(range)

範例 · 原始碼 · 設定此比例尺的 範圍 為指定的二元素數字陣列,同時也啟用 四捨五入;傳回此比例尺。

js
const x = d3.scaleBand().rangeRound([0, 960]);

這是一個便利方法,等同於

js
band.range(range).round(true)

四捨五入有時對於避免反鋸齒失真很有用,但也可以考慮 shape-rendering 的「crispEdges」樣式。

band.round(round)

abcdefghij

範例 · 原始碼 · 如果指定了 round,則會依據指定值啟用或停用四捨五入,並傳回此比例尺。

js
const x = d3.scaleBand(["a", "b", "c"], [0, 960]).round(false);

如果未指定 round,則會傳回四捨五入是否已啟用。

js
x.round() // false

如果已啟用四捨五入,則每個區段的起點和終點都會是整數。四捨五入有時對於避免反鋸齒失真很有用,但也可以考慮 shape-rendering 的「crispEdges」樣式。請注意,如果網域的寬度不是範圍基數的倍數,則可能會產生未使用的剩餘空間,即使沒有填補!請使用 band.align 來指定剩餘空間的分配方式。

band.paddingInner(padding)

abcdefghij

範例 · 原始碼 · 如果指定了 padding,則會將內部填補設定為指定的數字,該數字必須小於或等於 1,並傳回此比例尺。

js
const x = d3.scaleBand(["a", "b", "c"], [0, 960]).paddingInner(0.1);

如果未指定 padding,則會傳回目前的內部填補,預設為 0。

js
x.paddingInner() // 0.1

內部填補指定了範圍中保留為區段間空白空間的比例;值 0 表示區段間沒有空白空間,而值 1 表示 頻寬 為零。

band.paddingOuter(padding)

abcdefghij

範例 · 原始碼 · 如果指定了 padding,則會將外部填補設定為指定的數字,該數字通常在 [0, 1] 範圍內,並傳回此比例尺。

js
const x = d3.scaleBand(["a", "b", "c"], [0, 960]).paddingOuter(0.1);

如果未指定padding,則傳回目前的外部填充,其預設值為 0。

js
x.paddingOuter() // 0.1

外部填充指定空白的量,以step的倍數表示,在第一個頻帶之前和最後一個頻帶之後保留。

band.padding(padding)

abcdefghij

範例 · 原始碼 · 設定內部外部填充至相同padding值的便利方法。

js
const x = d3.scaleBand(["a", "b", "c"], [0, 960]).padding(0.1);

如果未指定padding,則傳回內部填充。

js
x.padding() // 0.1

band.align(align)

abcdefghij

範例 · 原始碼 · 如果指定align,則設定對齊至指定的值,該值必須在範圍 [0, 1] 內,並傳回此比例尺。

js
const x = d3.scaleBand(["a", "b", "c"], [0, 960]).align(0.5);

如果未指定align,則傳回目前的對齊,其預設值為 0.5。

js
x.align() // 0.5

對齊指定外部填充在範圍中如何分配。值 0.5 表示外部填充應均勻分配在第一個頻帶之前和最後一個頻帶之後;,頻帶應置中在範圍內。值 0 或 1 可用於將頻帶移至一側,例如將它們定位在軸線旁邊。更多資訊,請參閱此說明

band.bandwidth()

abcdefghij

範例 · 原始碼 · 傳回每個頻帶的寬度。

js
x.bandwidth() // 50.8235294117647

band.step()

abcdefghij

範例 · 原始碼 · 傳回相鄰頻帶開始之間的距離。

js
x.step() // 63.529411764705884

band.copy()

範例 · 原始碼 · 傳回此比例尺的精確副本。

js
const x1 = d3.scaleBand(["a", "b", "c"], [0, 960]);
const x2 = x1.copy();

對此比例尺的變更不會影響傳回的比例尺,反之亦然。