You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chart.js 如何生成由其他所有折线数据逐点求和得到的新折线?

实现思路

  • 先初始化一个空对象用于按日期累加Y值
  • 遍历所有现有数据集的所有数据点,将相同X(日期)对应的Y值相加
  • 最后将累加对象转换为Chart.js折线图要求的[{x: 日期, y: 总和}]格式

代码实现

如果你需要合并相同日期的Y值(常规折线图需求,同一X轴刻度仅显示一个总和点):

// 假设你的现有数据集存在变量 datasets 中,对应Chart.js配置里的datasets数组
const sumMap = {};

// 遍历所有数据集
datasets.forEach(dataset => {
  // 遍历当前数据集的所有数据点
  dataset.data.forEach(point => {
    const xVal = point.x;
    // 该日期无记录时先初始化为0
    if (!sumMap[xVal]) sumMap[xVal] = 0;
    // 累加Y值
    sumMap[xVal] += point.y;
  });
});

// 转换为目标数据格式
const sumLineData = Object.entries(sumMap).map(([x, y]) => ({x, y}));

如果你需要保留相同日期的多个数据点(匹配你给出的示例中2021-09-08存在两个点的情况,按数据点索引对齐累加):

const sumLineData = [];
// 取所有数据集的最大数据点长度,避免漏点
const maxPointCount = Math.max(...datasets.map(d => d.data.length));

for (let i = 0; i < maxPointCount; i++) {
  let totalY = 0;
  let currentX = null;
  datasets.forEach(dataset => {
    if (dataset.data[i]) {
      totalY += dataset.data[i].y;
      // 取首个数据集对应索引的X作为当前点的X,需确保所有数据集同索引的X值一致
      if (!currentX) currentX = dataset.data[i].x;
    }
  });
  sumLineData.push({x: currentX, y: totalY});
}

集成到Chart.js配置

生成sumLineData后直接新增数据集到原有配置即可:

datasets.push({
  label: '数值总和',
  data: sumLineData,
  borderColor: '#ff3d00',
  fill: false,
  tension: 0.1
});

内容的提问来源于stack exchange,提问作者spexxsoldier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:24:03