コンテンツにスキップ

対数スケール

対数(「log」)スケールは、出力範囲値が計算される前に、入力ドメイン値に対数変換が適用される点を除いて、線形スケールに似ています。範囲値 *y* へのマッピングは、ドメイン値 *x* の関数として次のように表すことができます: *y* = *m* log( *x* ) + *b*。

注意

log(0) = -∞ であるため、対数スケールのドメインは**厳密に正または厳密に負**でなければなりません。ドメインにはゼロを含んではならず、ゼロを横切ってはなりません。正のドメインを持つ対数スケールは正の値に対して明確に定義された動作を持ち、負のドメインを持つ対数スケールは負の値に対して明確に定義された動作を持ちます。(負のドメインの場合、入力値と出力値は暗黙的に -1 が乗算されます。)正のドメインを持つ対数スケールに負の値を渡した場合、またはその逆の場合、スケールの動作は未定義です。

scaleLog( *domain* , *range* )

· ソース · 指定されたドメイン範囲、底 10、デフォルト補間器、およびクランプが無効になっている新しい対数スケールを構築します。

js
const x = d3.scaleLog([1, 10], [0, 960]);

*domain* が指定されていない場合、デフォルトは [1, 10] です。 *range* が指定されていない場合、デフォルトは [0, 1] です。

*log* .base( *base* )

· ソース · *base* が指定されている場合、この対数スケールの底を指定された値に設定します。

js
const x = d3.scaleLog([1, 1024], [0, 960]).base(2);

*base* が指定されていない場合、現在の底を返します。デフォルトは 10 です。対数変換の性質上、底はスケールのエンコードには影響しません。どの目盛りが選択されるかにのみ影響します。

*log* .ticks( *count* )

· ソース · *linear* .ticksと同様ですが、対数スケール用にカスタマイズされています。

js
const x = d3.scaleLog([1, 100], [0, 960]);
const T = x.ticks(); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

が整数の場合は、返される目盛りは底の各整数乗内で均等に配置されます。そうでない場合は、底の累乗ごとに1つの目盛りが返されます。返される目盛りは、ドメインの範囲内にあることが保証されています。ドメインの桁数が *count* より大きい場合、累乗ごとに最大1つの目盛りが返されます。そうでない場合、目盛りの値はフィルタリングされませんが、 *log* .tickFormatを使用して目盛りラベルの表示をフィルタリングできることに注意してください。 *count* が指定されていない場合、デフォルトは 10 です。

*log* .tickFormat( *count* , *specifier* )

· ソース · *linear* .tickFormatと同様ですが、対数スケール用にカスタマイズされています。指定された *count* は、通常、目盛りの値を生成するために使用される count と同じ値を持ちます。

js
const x = d3.scaleLog([1, 100], [0, 960]);
const T = x.ticks(); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, …]
const f = x.tickFormat();
T.map(f); // ["1", "2", "3", "4", "5", "", "", "", "", "10", …]

目盛りが多すぎる場合、フォーマッタは一部の目盛りラベルに対して空の文字列を返すことがあります。ただし、対数変換を正確に伝えるために目盛りは引き続き表示されることに注意してください。フィルタリングを無効にするには、 *count* に Infinity を指定します。

count を指定する場合は、フォーマット *specifier* またはフォーマット関数を指定することもできます。たとえば、通貨の目盛りを 20 個表示する目盛りフォーマッタを取得するには、 `log.tickFormat(20, "$,f")` とします。指定子に定義された精度がない場合、精度はスケールによって自動的に設定され、適切なフォーマットが返されます。これは、スケールによって精度が自動的に設定されるフォーマットを指定する便利な方法を提供します。

*log* .nice()

· ソース · *linear* .niceと同様ですが、ドメインをの整数乗に拡張します。

js
const x = d3.scaleLog([0.201479, 0.996679], [0, 960]).nice();
x.domain(); // [0.1, 1]

ドメインに3つ以上の値がある場合、ドメインをナイスにしても、最初と最後の値にのみ影響します。スケールをナイスにしても、現在のドメインのみが変更されます。 *log* .domainを使用して後続に設定されるドメインは自動的にはナイスされません。必要に応じて、新しいドメインを設定した後、スケールを再ナイスする必要があります。