d3.js序数标度返回错误的值

时间:2015-02-12 13:58:40

标签: d3.js coffeescript

有人可以向我解释我做错了什么,以及为什么'B'不是'50'而'C'是'0'?

示例(Coffeescript)

scale = d3.scale.ordinal().domain(['A', 'B', 'C']).range([0,100])

console.log scale.domain()
console.log scale.range()

console.log scale('A')
console.log scale('B')
console.log scale('C')

结果

["A", "B", "C"]
[0, 100]
0
100
0

example on jsfiddle

1 个答案:

答案 0 :(得分:3)

如果您在此处使用range,则可以在域和范围值之间定义一对一的映射。请参阅the docs,具体来说:

  

"如果范围中的元素少于域中的元素,则比例将从范围的开头循环值。"

您的示例中发生了什么:C被映射到与A相同的范围值

在这种情况下,您应该使用rangePoints代替。这将为您提供连续间隔,细分为 n 均匀间隔点,其中 n 是输入域中(唯一)值的数量。参见:

scale = d3.scale.ordinal().domain(['A', 'B', 'C']).rangePoints([0,100])

请参阅:http://jsfiddle.net/henbox/b0vktgjq/1/