如何在d3js中设置笔刷范围,同时使用时间刻度

How to set up brush extent in d3 js while using time scale?

本文关键字:时间刻度 范围 d3js 设置      更新时间:2023-09-26

我用刷子刷牙有问题。extent([val1,val2])

关于文件:https://github.com/mbostock/d3/wiki/SVG-Controls当我像这样设置brush.extent([val1,val2])时:

var xScale = d3.scale.linear()
    .domain(data)
    .range([0, 500]);
var brush = d3.svg.brush()
    .x(xScale)
    .on('brushstart', function() {
        this.brushStart();
    })
    .on('brushend', function() {
        this.brushEnd();
    })
    .extent([100, 300]);

它将在xAxis上显示从100到200的笔刷区域(笔刷在右侧位置可见)。

不幸的是,当我使用d3.time.scale()时,它根本不起作用:

var xScale = d3.time.scale()
    .domain(data)
    .range([0, 500]);
var brush = d3.svg.brush()
    .x(xScale)
    .on('brushstart', function() {
        this.brushStart();
    })
    .on('brushend', function() {
        this.brushEnd();
    })
    .extent([100, 300]);
    // or
    // .extent(['2013-08-01T00:00:00Z', '2013-08-10T23:59:59Z']);
    // or
    // .extent(['2013-08-01 00:00:00', '2013-08-10 23:59:59']);
    // or even
    // .extent([new Date(2013, 8, 1, 00, 00, 00), new Date(2013, 8, 10, 23, 59, 59)]);

它不显示拉丝区域。

当我使用d3.time.scale()时,如何设置刷过的区域?

当然,数据包含的日期范围可以适合拉丝,甚至有边距。

Mariusz

我找到了问题和解决方案。

我正在使用功能:

var parseDate = d3.time.format('%Y-%m-%d %H:%M:%S').parse;

处理所有原始格式为yyyy-mm-dd hh:mm:ss 的数据值

在设置brush.extend([val1,val2])时,我需要使用相同的parseDate()函数:

brush.extent([parseDate(val1), parseDate[val2]]);

Mariusz