如何在D3中获取比例尺的类型?

8
如果我创建了两个刻度:
a = d3.scale.ordinal()
b = d3.scale.linear()

我如何知道哪个是序数轴,哪个是线性轴? 类似于 d3.scale.isOrdinal(a)

2个回答

12

在创建比例尺时添加自己的类型属性:

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;    

5

没有直接的方式可以知道比例尺的类型,也就是说比例尺函数中没有属性可以告诉你其所属的类型。

最好的方法就是通过检查某种类型中存在而另一种类型中不存在的配置方法的存在/不存在来测试比例尺接口

例如:

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

序数比例尺提供了rangePoints函数,而线性比例尺则没有。


检查域对象类型以确定时间刻度。scale.domain()[0] instanceof Date - Nathan Reese

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接