2013-08-17 50 views
3

我有使用brush.extent塗刷([VAL1,val2次])如何在使用時間刻度的同時在d3 js中設置筆刷範圍?

關於文件的一個問題:當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

回答

10

我發現問題和解決方案。

我使用功能:

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]]); 

馬裏烏什