我有一个 d3 图,它的 x 轴使用线性比例。它看起来像这样:
...
y |
|
+-------------------------------------------
0.0 0.5 1.0 1.5 2.0 2.5 3.0
Time in weeks
在此轴下方,我想显示与 x 轴对齐的数据行。像这样:
23 23 22 19
使用这些数据:
var nums = [23, 23, 22, 19];
var times = [0, 0.5, 1.5, 3];
times
是nums
应该落在Time in weeks
x 轴上的位置。所以第一个索引在nums
下0.0
,第二个在 下0.5
,依此类推。
比例函数看起来像这样:
var x = d3.scale.linear().domain([0,3]).range([0, 600]);
因此x(0.5)
返回正确的范围值以在新轴上显示刻度。但我要显示的是nums
数组中的相应值。即显示 的值nums[times.indexOf(0.5)]
。
有没有办法覆盖scale()
所使用的内容,d3.svg.axis()
以便在仍用作输入域的同时显示nums
值而不是值?times
times
编辑
编辑 2
感谢 ne8il 的回答,我想通了。答案并不完整,但它构成了这段代码的基础:
var x1Axis = d3.svg.axis()
.scale(x1)
.ticks(nums)
.tickValues(times)
.tickFormat(function(x){return nums[times.indexOf(x)];})