2014-01-29 2 views
0

Мы отображение временных рядов данных (использование вычислительного ресурса, отобранное ежечасно в течение нескольких месяцев) на гистограмме многоуровневого D3.js:Упростить данные в формате JSON временных рядов построены в D3.js области диаграммы

d3.json("/growth/instance_count_1month.json", function(data) { 

    data.forEach(function(d) { 
     d.datapoints = d.datapoints.map(
     function(da) { 
      // NOTE i'm not sure why this needs to be multiplied by 1000 
      return {date: new Date(da[1] * 1000), 
        count: da[0]}; 
     }); 
    }); 

    x.domain(d3.extent(data[0].datapoints, function(d) { return d.date; })); 
    y.domain([0, 
       Math.ceil(d3.max(data.map(function (d) {return d3.max(d.datapoints, function (d) { return d.count; });}))/100) * 100 
      ]); 

результат довольно Spiky на мой вкус:

enter image description here

есть простой способ упростить данные, либо с помощью D3 или другой легко доступной библиотеки? Я хочу уменьшить остроту, но также уменьшить объем данных, которые нужно графизировать, так как он выйдет из-под контроля.

У меня есть предпочтение делать это на уровне пользовательского интерфейса, а не прикасаясь к каротажным процедурам (даже если избыточные данные в формате JSON должны будут быть переданы.)

+0

Ответ на ваш вопрос (фильтрация приходит на ум), но здесь очень хороший пример сглаживания данных временных рядов с использованием [Rickshaw] (http://code.shutterstock.com/rickshaw/examples/extensions.html) , Это открытый источник, построенный поверх D3. – FernOfTheAndes

+0

Вы можете поиграть с [интерполяцией] (https://github.com/mbostock/d3/wiki/SVG-Shapes#wiki-line_interpolate) строки/области, которую вы используете в качестве запуска. –

+0

процедуры регистрации? –

ответ

0

У вас есть несколько вариантов, вы должны решили что лучше всего подходит для типа данных, которые у вас есть, и о потребностях в нем. Не зная больше о ваших данных, лучшее, что я могу предложить, это повторная выборка. Просто сообщите данные с более длинными интервалами («свертывание» данных). В качестве альтернативы вы можете использовать скользящее среднее значение или посмотреть на различные алгоритмы сглаживания линии.

+0

Сэмплирование с большими интервалами на самом деле не работает: скажем, я всегда хочу 50 Х точек на графике, независимо от периода времени. Вы не знали бы заранее, какой интервал выборки должен быть (и он изменится). –

+0

Если вы всегда хотите 50 очков, то вы описываете какую-то кусочно-линейную аппроксимацию данных. –

+0

Да. Вероятно, есть возможность использовать функции интерполяции D3 для создания нового массива из 50 пунктов из старого. Я посмотрю. –