2016-08-18 27 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

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