javascript - 使用时间刻度时如何在d3 js中设置笔刷范围?

标签 javascript d3.js brush

我在使用 brush.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() 时设置刷过的区域?

当然,数据包含适合刷过的日期范围,甚至有边距。

马吕斯

最佳答案

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

我正在使用函数:

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

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

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

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

马吕斯

关于javascript - 使用时间刻度时如何在d3 js中设置笔刷范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18292353/

相关文章:

javascript - 返回 true 和 setimout

javascript - D3.js:在转换运行时检索 x 轴信息

delphi - 为什么我的自定义绘制 ListView 上会出现白色的列分隔符?

javascript - 使用 jQuery 更新 XML 字符串

javascript - 如何阻止 google maps api v3 在北极上方或南极下方的灰色区域中平移?

javascript - 通过点属性访问器以字符串形式获取对象键

html - d3 : Brush with an input field

javascript - 如何添加一个简单的鼠标悬停信息窗口

javascript - 如何打开模态点击 SVG javascript d3

d3.js - 如何在 brush "brush"事件处理程序中获取选定数据?