2014-12-07 1 views
0

Я пытаюсь нарисовать диаграмму области с использованием dc.js, а конечная дата (то есть справа) диаграммы основана на текущей дате, а не на последняя дата в наборе данных. В тех случаях, когда есть дата разрыв между точками данных, я хочу область простирается от одного пункта к следующему, не ничьей в 0.dc.js: расширяющаяся линия и область до конца диаграммы

Учитывая эти данные:

var data = [ 
    {domain: "foo.com", project: "pdp", repo: "myrepo", commit_date: "6/1/2014", lines_added: 100, lines_deleted: 50}, 
    {domain: "foo.com", project: "pdp", repo: "myrepo", commit_date: "7/1/2014", lines_added: 100, lines_deleted: 50} 
     ]; 
var ndx = crossfilter(data); 

линия Картографическая/область заканчивается в точке данных «7/1/2014», но я хочу, чтобы она растянула всю длину диаграммы.

Соответствующий код для рисования диаграммы:

var dateDim = ndx.dimension(function(d) {return d.commit_date;}); 
var minDate = dateDim.bottom(1)[0].commit_date; 
var maxDate = new Date(); 
var domainGroup = dateDim.group().reduceSum(function(d) {return d.cumulative_lines;}); 

unshippedlineChart 
    .width(500).height(200) 
    .dimension(dateDim) 
    .group(domainGroup) 
    .renderArea(true) 
    .x(d3.time.scale().domain([minDate,maxDate])) 
    .brushOn(false) 
    .interpolate('step-after') 
    .yAxisLabel("Unshipped Value"); 

Полный пример на http://jsfiddle.net/xayhkcvn/1/

ответ

0

Вы на самом деле не задать вопрос :-), но я думаю, вы можете искать способы предварительно фильтровать ваши данные, чтобы он расширялся до сегодняшнего дня и удалять любые нули.

Этот материал не встроен в dc.js, но есть some example code in the FAQ, который может помочь. В частности, существует функция remove_empty_bins, которая адаптирует группу для удаления любых нулей.

Вы можете так же определить функцию для добавления конечной точки (непроверенные):

function duplicate_final_bin(source_group, key) { 
    return { 
     all:function() { 
      var ret = Array.prototype.slice.call(source_group.all()); // copy array 
      if(!ret.length) return ret; 
      ret.push({key: key, value: ret[ret.length-1].value}); 
      return ret; 
     } 
    }; 
} 

Вы можете сочинить это с remove_empty_bins:

var super_group = duplicate_final_bin(remove_empty_bins(domainGroup), maxDate); 

Идея заключается в том, чтобы создать объект-оболочку, которая динамически добавляет или удаляет материал из (всегда меняющегося) source_group.all() по запросу. dc.js будет вызывать group.all() всякий раз, когда он перерисовывается, и эти обертки перехватывают этот вызов и адаптируют данные, возвращаемые группой crossfilter.

+0

Было бы неплохо иметь библиотеку адаптеров crossfilter, но пока есть только такой специальный код. – Gordon

 Смежные вопросы

  • Нет связанных вопросов^_^