有人可以向我解释我做错了什么,以及为什么'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
答案 0 :(得分:3)
如果您在此处使用range
,则可以在域和范围值之间定义一对一的映射。请参阅the docs,具体来说:
"如果范围中的元素少于域中的元素,则比例将从范围的开头循环值。"
您的示例中发生了什么:C
被映射到与A
相同的范围值
在这种情况下,您应该使用rangePoints
代替。这将为您提供连续间隔,细分为 n 均匀间隔点,其中 n 是输入域中(唯一)值的数量。参见:
scale = d3.scale.ordinal().domain(['A', 'B', 'C']).rangePoints([0,100])