AmCharts - 将数据集与缺失值进行比较
AmCharts - Compare dataSets with missing values
我正在使用 AmCharts 显示两个数据集,它们代表两种文件类型的下载次数:pdf 和 xls。该图表类似于可在
https://www.amcharts.com/demos/multiple-data-sets/,但我将 recalculateToPercents 选项设置为 'never',以始终显示比较系列的实际下载次数。我使用的是小时周期。
我遇到的问题是,在第一种文件类型(主数据集)在特定时间内没有下载的情况下,第二种文件类型的值也不会显示,即使有超过 0 个下载第二种文件类型。
amCharts 是否可以显示主数据集中不存在的日期的比较系列值?
使用此迷你插件,如果 syncDataTimestamps: true
在您的图表配置中已设置,它将预处理您的数据并将缺少的 "empty" 数据点添加到主数据集,以便所有显示所有数据集中的数据点,即使它们的时间戳不重叠:
/**
* 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。
我正在使用 AmCharts 显示两个数据集,它们代表两种文件类型的下载次数:pdf 和 xls。该图表类似于可在 https://www.amcharts.com/demos/multiple-data-sets/,但我将 recalculateToPercents 选项设置为 'never',以始终显示比较系列的实际下载次数。我使用的是小时周期。
我遇到的问题是,在第一种文件类型(主数据集)在特定时间内没有下载的情况下,第二种文件类型的值也不会显示,即使有超过 0 个下载第二种文件类型。
amCharts 是否可以显示主数据集中不存在的日期的比较系列值?
使用此迷你插件,如果 syncDataTimestamps: true
在您的图表配置中已设置,它将预处理您的数据并将缺少的 "empty" 数据点添加到主数据集,以便所有显示所有数据集中的数据点,即使它们的时间戳不重叠:
/**
* 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。