1

我正在使用 AmCharts 显示两个数据集,它们代表两种文件类型的下载次数:pdf 和 xls。该图表类似于 https://www.amcharts.com/demos/multiple-data-sets/提供的图表,但我将 recalculateToPercents 选项设置为“从不”以始终显示比较系列的实际下载次数。我正在使用每小时时间段。

我遇到的问题是,在第一种文件类型(主数据集)在特定时间没有下载的情况下,即使第二种文件类型的下载量超过 0,也不会显示第二种文件类型的值.

amCharts 是否可以显示主数据集中不存在的日期的比较系列值?

4

1 回答 1

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"]);

这取自这个 amCharts 演示

于 2016-08-18T08:36:03.180 回答