我使用的是 d3,在我的图表中我有一个 UTC 格式的时间刻度。
xScale = d3.time.scale.utc().range([0, chartWidth]);
Run Code Online (Sandbox Code Playgroud)
我需要动态指定刻度并动态更改域以避免刻度标签混乱。
我根据域计算刻度并将刻度设置为最接近的 5 倍数。但是,我注意到一个问题,有时在更改域时刻度位置不一致。见下图:
在一些论坛中,我发现可以通过函数设置刻度值tickValues(d3.range(starting value, end value, interval))。请参阅 mbostock 的这篇文章。
现在我不确定——我怎样才能在我的时间尺度上做同样的事情?如果我想计算我自己的 xAxis 刻度值(使用 UTC 时间刻度),我该怎么做?
谢谢。
您想强制每 N 分钟计时一次吗?或N[时间单位]?
您可以使用:
var startDate = new Date(2016, 0, 1, 2, 0, 0),
endDate = new Date(2016, 0, 1, 4, 0, 0),
millisecondsBetweenTicks = 300000; //<-- 5 minutes
var x = d3.time.scale.utc()
.domain([startDate, endDate])
.range([0, width]);
var xAxis = d3.svg.axis()
.scale(x)
.tickValues(d3.range(startDate, endDate, millisecondsBetweenTicks )
.map(function(d){ return new Date(d) }) //<-- remap to dates
);
Run Code Online (Sandbox Code Playgroud)
完整示例:
var startDate = new Date(2016, 0, 1, 2, 0, 0),
endDate = new Date(2016, 0, 1, 4, 0, 0),
millisecondsBetweenTicks = 300000; //<-- 5 minutes
var x = d3.time.scale.utc()
.domain([startDate, endDate])
.range([0, width]);
var xAxis = d3.svg.axis()
.scale(x)
.tickValues(d3.range(startDate, endDate, millisecondsBetweenTicks )
.map(function(d){ return new Date(d) }) //<-- remap to dates
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3007 次 |
| 最近记录: |