2016-08-18 5 views
1

Я использую AmCharts для отображения двух наборов данных, которые представляют собой количество загрузок на два типа файлов: pdf и xls. Диаграмма аналогична диаграмме, доступной по адресу https://www.amcharts.com/demos/multiple-data-sets/, но я установил параметр пересчета в значение «Никогда», чтобы всегда показывать фактический подсчет загрузки для сравниваемых серий. Я использую почасовой период.AmCharts - Сравнить данные Наборы с отсутствующими значениями

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

Возможно ли, чтобы amCharts отображал значения сравниваемых серий для дат, отсутствующих в основном наборе данных?

ответ

1

Используйте этот мини-плагин, который, если в вашем графике установлен код syncDataTimestamps: true, будет предварительно обработать ваши данные и добавить отсутствующие «пустые» точки данных в основной набор данных, чтобы все точки данных со всех наборов данных были показано, даже если их временные метки не перекрывают друг друга:

/** 
* amCharts plugin: sync timestamps of the data sets 
* --------------- 
* Will work only if syncDataTimestamps is set to true in chart config 
*/ 
AmCharts.addInitHandler(function(chart) { 

    // check if plugin is enabled 
    if (chart.syncDataTimestamps !== true) 
    return; 

    // go thorugh all data sets and collect all the different timestamps 
    var dates = {}; 
    for (var i = 0; i < chart.dataSets.length; i++) { 
    var ds = chart.dataSets[i]; 
    for (var x = 0; x < ds.dataProvider.length; x++) { 
     var date = ds.dataProvider[x][ds.categoryField]; 
     if (dates[date.getTime()] === undefined) 
     dates[date.getTime()] = {}; 
     dates[date.getTime()][i] = ds.dataProvider[x]; 
    } 
    } 

    // iterate through data sets again and fill in the blanks 
    for (var i = 0; i < chart.dataSets.length; i++) { 
    var ds = chart.dataSets[i]; 
    var dp = []; 
    for (var ts in dates) { 
     if (!dates.hasOwnProperty(ts)) 
     continue; 
     var row = dates[ts]; 
     if (row[i] === undefined) { 
     row[i] = {}; 
     var d = new Date(); 
     d.setTime(ts); 
     row[i][ds.categoryField] = d; 
     } 
     dp.push(row[i]); 
    } 
    dp.sort(function(a,b){ 
     return new Date(a[ds.categoryField]) - new Date(b[ds.categoryField]); 
    }); 
    ds.dataProvider = dp; 
    } 

}, ["stock"]); 

Это взято из this amCharts demo.

+0

Отлично, это именно то, что мне нужно. –

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

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