【发布时间】:2017-11-21 23:29:21
【问题描述】:
我正在使用画布实现 2d 图表。我想重用 d3 的逻辑来生成图表的轴。 d3 在生成轴方面做了很多出色的工作,我想利用它。
(注意:出于向后兼容的原因,我暂时无法使用 d3v3。)
考虑以下 d3 代码:
let scale = d3.time.scale()
.range([0, width])
.domain([lo, hi]);
let axis = d3.svg.axis()
.scale(scale)
.ticks(num_ticks)
.tickSize(10)
.orient("bottom");
我可以将其渲染为图表 div:
svg.selectAll('.x-axis').call(axis);
我希望能够通过编写一个行为如下的函数以编程方式从axis 中获取刻度数据,包括格式化的标签:
ticks = get_axis_ticks(axis)
ticks 应保存每个刻度位置(在此特定情况下为 Date)和相应的 d3 生成的标签。
[[Date(...), "Wed 19"],
[Date(...), "Fri 21"],
[Date(...), "Apr 23"],
[Date(...), "Tue 25"],
...]
然后我可以使用这些数据在我的画布上绘制一个轴。
我已经深入研究了 d3v3 源代码(尤其是这里:https://github.com/d3/d3/blob/v3.5.17/src/svg/axis.js),但我发现很难将逻辑与 SVG 操作区分开来。
我们将不胜感激。
【问题讨论】:
标签: javascript d3.js