7

2 つのスケールを作成する場合:

a = d3.scale.ordinal()
b = d3.scale.linear()

どちらが序数でどちらが線形かをどうやって知ることができますか? 何かのようなものd3.scale.isOrdinal(a)

4

2 に答える 2

11

スケールを作成するときに、独自のタイプ プロパティを追加します。

var scaleType = {
    LINEAR: "LINEAR",
    POWER: "POWER",
    LOG: "LOG",
    ORDINAL: "ORDINAL"    
};

var scale_a = d3.scale.ordinal()
    .domain([1,2,3])
    .range([0,100]);
scale_a.type = scaleType.ORDINAL;

var scale_b = d3.scale.linear()
    .domain([0,100])
    .range([0,100]);
scale_b.type = scaleType.LINEAR;    
于 2014-02-18T18:04:50.310 に答える
5

直接知る方法はありません。つまり、どのタイプのスケールかを示すスケール関数のプロパティはありません。

これを行う最善の方法は、いずれかのタイプに存在し、他のタイプには存在しない構成メソッドの有無をチェックして、スケールインターフェイスをテストすることです。

例えば:

typeof a.rangePoints === "function"
typeof b.rangePoints === "undefined"

序数スケールは rangePoints 関数を公開しますが、線形スケールは公開しません

于 2013-05-30T16:33:45.960 に答える