Chart.js - 沿x(时间)轴合并天数总计?

问题描述 投票:3回答:1

我正在向我的图表中提供两个每日统计数据集。如您所见,每个元素代表特定日期的值。

"data":[[{"y":"1",  "x":"2018-04-01T04:00:00Z"},
         {"y":"14", "x":"2018-04-02T04:00:00Z"},
         {"y":"5",  "x":"2018-04-03T04:00:00Z"},
         {"y":"7",  "x":"2018-04-04T04:00:00Z"},
         ...

x轴定义如下:

xAxes: [{
         type: 'time',
         distribution: 'series',
         time: {
                unit: 'month'
               }
        }]

我(天真地?)认为图表会将日期值汇总(汇总)到适当的月份桶中,但这不是我得到的。相反,我沿着x轴获得了每月刻度线,但是数据点以每日精度绘制在图表中。 (见截图。)

在我开始重新处理我的数据集以手动将日期分配到他们各自的月份桶之前,我想知道图表是否实际上可以为我做这个但是我只是设置错误,或者我是否在做事实上,在将数据集提供给图表进行绘图之前,我需要自己处理此摘要。

谢谢你的建议!

javascript chart.js
1个回答
2
投票

我通过在组装底层数据集期间自己进行汇总来解决这个问题,然后将其提供给图表。

var dayDate = new Date($scope.insights.locationMetrics[lm].metricValues[metric].dimensionalValues[dim].timeDimension.timeRange.startTime);
var monthDate = dayDate.getFullYear() + "-" + (dayDate.getMonth() + 1);

var hitCount = {
    y: $scope.safeNumber($scope.insights.locationMetrics[lm].metricValues[metric].dimensionalValues[dim].value),
    x: monthDate
}
var alreadyRecorded = hits[labelIdx].findIndex(obj => obj.x == hitCount.x)

if (alreadyRecorded > -1) {
    hits[labelIdx][alreadyRecorded].y += Number(hitCount.y);
}
else {
    hits[labelIdx].push(hitCount);
}
  1. 从基础数据源中提取日期
  2. 从日期中提取yyyy-mm
  3. 创建hitCount对象
  4. 检查hitCount对象是否已存在于数组中
  5. 如果对象已经在数组中,则增加数组中的hitCount(y)。
  6. 否则,将对象推入阵列。
© www.soinside.com 2019 - 2024. All rights reserved.