2015-04-08 3 views
2

Я использую dc.lineChart для создания линейной диаграммы для отображения частотного времени VS. Ниже приведен мой кодdc.js linechart не показывает ничего

var freqchart=dc.lineChart("#chart1"); 
var ndx=crossfilter(data); 
var countByTime=ndx.dimension(function (d) { 

       return d.time; 

     }); 

     var dateformat=d3.time.format("%m-%d-%Y"); 
     var freqbyTimeGroup = countByTime.group() 
       .reduceCount(function(d) { return d.time; }); 
    freqchart.width(400).height(200).transitionDuration(500) 
     .dimension(countByTime).group(freqbyTimeGroup) 
     .elasticY(true).x(
       d3.time.scale().domain([d3.min(data,function(d){return d.time}),d3.max(data,function(d){return d.time})])).on("filtered", onFilt).yAxisLabel("Frequency").xAxisLabel('Time'); 

Но я получаю следующую пустую вещь без графика. enter image description here Почему я не могу просмотреть график. Какие изменения нужны в моем графике. Я хочу показать общие события за определенный период времени. Есть много детекторов, дающих ответ в то же время. Я хочу показать количество этих детекторов в определенное время.

+0

Можете ли вы создать скрипку? Трудно устранить неполадки без простого самостоятельного примера – Gordon

+1

Первое, что нужно проверить, это то, что ваша группа возвращает данные, которые вы ожидаете, а не NaNs и т. Д. – Gordon

+0

Возможно, моя группа возвращает NaNs. Но почему это происходит? Я смущен тем, какие изменения необходимы. –

ответ

4

Я внес ряд изменений в вашу скрипку и заставил ее работать.

Вот моя вилка: http://jsfiddle.net/gordonwoodhull/6e67uzfn/11/

Некоторые из изменений, которые я сделал:

  1. фиксированные даты, которые имели недопустимый синтаксис. (Составлено мой, потому что я не был уверен, что вы имели в виду там.)
  2. сделать проход над данными для анализа даты, используя dateformat.parse()
  3. вызова chart.render()
  4. удалил аргумент group.reduceCount(), который не делает возьмите любые аргументы
  5. (вероятно, подсказка, которую вы искали) call .xUnits(d3.time.days) - этот вызов требуется, чтобы dc.js знал, какие тики создаются на оси x.

Вы хотите сравнить зернистость вашего xUnits с гранулярностью, используемой для ящиков с деньгами. Вы определяете размерность бункера, когда вы определяете размер или группу, например. если вы хотите бункер по дням,

var countByTime = data.dimension(function(d) { return d3.time.day(d.time); }); 

В противном случае он будет использовать точные значения времени, которые вплоть до миллисекунды и не могу бен вообще.

Надеюсь, это поможет!

+0

Привет, я не работал с датой. Скорее время в формате H: M: S. –

+1

Несомненно, вы могли бы определенно изменить формат даты на время разбора. (В вашем примере были неупомянутые времена и формат даты, поэтому я не был уверен, что делать.) Таким образом, вы можете использовать 'd3.time.hours' или' d3.time.minutes' – Gordon

+0

Большое спасибо. Я получил идею –