順序スケール
連続スケールとは異なり、順序スケールは離散的な定義域と値域を持ちます。たとえば、順序スケールは、名前付きカテゴリのセットを色のセットにマッピングしたり、棒グラフの棒の水平方向の位置を決定したりします。
scaleOrdinal(定義域, 値域)
サンプル · ソースコード · 指定された定義域と値域を持つ新しい順序スケールを構築します。
const color = d3.scaleOrdinal(["a", "b", "c"], ["red", "green", "blue"]);
定義域が指定されていない場合、デフォルトは空の配列です。値域が指定されていない場合、デフォルトは空の配列です。順序スケールは、空でない値域が定義されるまで、常に未定義を返します。
順序スケール(値)
サンプル · ソースコード · 入力定義域の値が与えられた場合、出力値域の対応する値を返します。
color("a") // "red"
指定された値がスケールの定義域にない場合、不明な値を返します。または、不明な値が暗黙的(デフォルト)の場合、値は暗黙的に定義域に追加され、値域の次に利用可能な値が値に割り当てられます。そのため、同じ入力値が与えられた場合、スケールのこの呼び出しと後続の呼び出しは同じ出力値を返します。
順序スケール.domain(定義域)
サンプル · ソースコード · 定義域が指定されている場合、定義域を指定された値の配列に設定します。
const color = d3.scaleOrdinal(["red", "green", "blue"]).domain(["a", "b", "c"]);
color("a"); // "red"
color("b"); // "green"
color("c"); // "blue"
定義域の最初の要素は値域の最初の要素に、2番目の定義域の値は2番目の値域の値に、というようにマッピングされます。定義域の値は、プリミティブ値からインデックスへのInternMapに内部的に格納されます。結果のインデックスは、値域から値を取得するために使用されます。したがって、順序スケールの値はプリミティブ値に強制変換可能でなければならず、プリミティブ定義域の値は対応する値域の値を一意に識別します。
color.domain() // ["a", "b", "c"]
定義域が指定されていない場合、このメソッドは現在の定義域を返します。
不明な値が暗黙的(デフォルト)の場合、順序スケールに定義域を設定することはオプションです。この場合、スケールに渡された各一意の値に値域から新しい値を割り当てることによって、定義域は暗黙的に使用から推測されます。
const color = d3.scaleOrdinal(["red", "green", "blue"]);
color("b"); // "red"
color("a"); // "green"
color("c"); // "blue"
color.domain(); // inferred ["b", "a", "c"]
注意
決定論的な動作のためには、明示的な定義域をお勧めします。使用状況から定義域を推測することは、順序に依存します。
順序スケール.range(値域)
サンプル · ソースコード · 値域が指定されている場合、順序スケールの値域を指定された値の配列に設定します。
const color = d3.scaleOrdinal().range(["red", "green", "blue"]);
定義域の最初の要素は値域の最初の要素に、2番目の定義域の値は2番目の値域の値に、というようにマッピングされます。値域の要素が定義域よりも少ない場合、スケールは値域の先頭から値を再利用します。値域が指定されていない場合、このメソッドは現在の値域を返します。
順序スケール.unknown(値)
サンプル · ソースコード · 値が指定されている場合、不明な入力値のスケールの出力値を設定し、このスケールを返します。
const color = d3.scaleOrdinal(["a", "b", "c"], d3.schemeTableau10).unknown(null);
color("a"); // "#4e79a7"
color("b"); // "#f28e2c"
color("c"); // "#e15759"
color("d"); // null
値が指定されていない場合、現在の不明な値を返します。デフォルトは暗黙的です。暗黙的な値は、暗黙的な定義域の構築を可能にします。順序スケール.domainを参照してください。
順序スケール.copy()
サンプル · ソースコード · この順序スケールの正確なコピーを返します。
const c1 = d3.scaleOrdinal(["a", "b", "c"], d3.schemeTableau10);
const c2 = c1.copy();
このスケールへの変更は、返されたスケールに影響を与えません。逆もまた同様です。
scaleImplicit
サンプル · ソースコード · 順序スケール.unknownの特別な値であり、暗黙的な定義域の構築を可能にします。不明な値は暗黙的に定義域に追加されます。
const color = d3.scaleOrdinal(["a", "b", "c"], d3.schemeTableau10);
color.unknown(); // d3.scaleImplicit
注意
決定論的な動作のためには、明示的な定義域をお勧めします。使用状況から定義域を推測することは、順序に依存します。