2016-08-18 26 views
1

我正在使用AmCharts來顯示兩個數據集,它們表示每個兩種文件類型的下載數量:pdf和xls。該圖表與 https://www.amcharts.com/demos/multiple-data-sets/的圖表類似,但我將recalculateToPercents選項設置爲「never」,以始終顯示比較系列的實際下載計數。我正在使用小時期。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

太好了,這正是我所需要的。 –