2015-10-19 60 views
0

我有大量的与时间相关的数据。我想绘制一个希望简单的线条图。简化示例:如何在D3.js线图上绘制时间数据

var data = [{ time: 13:30, size: 100 }, { time: 13:37, size: 500}, { time: 13: 42, size: 300 } 
{ time: 13:51, size: 150 }, { time: 13:56, size: 175 }, { time: 15:59, size: 75 } 
{ time: 16:11, size: 75 }, { time: 16:37, size: 125 }, { time: 15:27, size: 200 } [...] 
{ time: 20:36, size: 500 }] 

许多时间值和相应的大小值。当然,我不想在这个图表上绘制每一个时间值。相反,我想采取13:30的最低值,然后以30分钟的时间间隔(即13:30,14:00,14:30 ... 20:30)绘制坐标轴上的时间,直到我点击最近的时间在我的数据阵列中。与此同时,我想每大小值绘制。因此,图表将只显示13:30和14:00的勾号,但与13.37,13.42,13.51,13.56相对应的值将被绘制在线上。

我该怎么做呢?

我第一次尝试这样的:

var graph = d3.select('.graph'), 
    WIDTH = 790, 
    HEIGHT = 250, 
    MARGINS = { 
     top: 20, 
     right: 20, 
     bottom: 20, 
     left: 50 
     } 

    xScale = d3.scale.linear().range([MARGINS.left, WIDTH - MARGINS.right]), 
    yScale = d3.scale.linear().range([HEIGHT - MARGINS.top, MARGINS.bottom]).domain([smallest, largest]), 
    xAxis = d3.svg.axis().scale(xScale), 
    yAxis = d3.svg.axis().scale(yScale).orient("left"); 

NB“最小”和“最大”的变量都在我的数据阵列,在其他地方计算的最小和最大大小值。很明显,这是错误的,因为这会绘制轴上的每个时间值(如上所述,我不想这样),即使我做了错误和毛病可怕的。

我该如何去实现我想达到的目标?

THX - Gaweyne

回答

0

解决它。 d3.time.scale not d3.scale.linear()

xScale = d3.time.scale(range([MARGINS.left, WIDTH - MARGINS.right]).domain(new Date([//Earliest Date//]), new Date([//Latest Date//])) 
相关问题