You need to enable JavaScript to run this app. 如何使用rollup为D3.js堆叠条形图准备测试结果统计数据
优惠活动
大模型
产品
解决方案
定价
更多

如何使用rollup为D3.js堆叠条形图准备测试结果统计数据

问题核心原因

  • d3.rollup返回的是InternMap类型,不是数组,无法直接调用数组的map方法,需要先通过Array.from()将Map转为键值对数组
  • 原有代码存在拼写错误,同时Map结构没有.key/.value属性,需要用解构的方式取出键和值

方案1:生成堆叠条形图直接可用的层级数据(保留rollup用法)

你之前的日期解析、rollup统计逻辑完全不需要修改,只需要替换后续的转换代码即可:

// 你之前的rollup统计逻辑保持不变
let data_count = d3.rollup(jsonObj, v => v.length, d => d.Date, d => d.Result)

// 新增Map转数组+堆叠计算逻辑
let processed_data = Array.from(data_count.entries()).map(([date, resultMap]) => {
  let y0 = 0;
  let total = 0;
  // 内层结果统计Map也转为数组遍历
  const values = Array.from(resultMap.entries()).map(([result, count]) => {
    const return_object = {
      result,
      count,
      y0: y0,
      y1: y0 + count
    };
    y0 += count;
    total += count;
    return return_object;
  });
  return {
    date,
    values,
    total
  };
});

转换后的数据可以直接用于D3堆叠条形图的渲染,不需要额外处理。


方案2:生成适配案例的宽表格式

如果需要适配你提到的「日期+三类结果数量」的CSV输入格式,用以下代码转换即可:

const resultTypes = ['OK', 'NOK', 'Aborted']
let wideFormatData = Array.from(data_count.entries()).map(([date, resultMap]) => {
  // 可根据需求调整日期输出格式
  const dateStr = d3.timeFormat("%d-%m-%Y %H:%M:%S")(date)
  const row = { Date: dateStr }
  resultTypes.forEach(type => {
    // 单日无对应结果时默认补0
    row[type] = resultMap.get(type) || 0
  })
  return row
})

转换后的wideFormatData结构和你给出的案例CSV结构完全匹配,可以直接代入对应案例使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 06:45:03