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

Apache ECharts动态系列映射问题:实现设备版本堆叠柱状图遇阻

ECharts 设备版本堆叠柱状图最简实现方案

你的核心问题是生成series时没有严格对齐x轴设备类目的顺序,下面是最简实现方式,只需要3步就能生成符合要求的配置:

完整可运行代码

var data = [
  {
    "key": {
      "field1": "Device 1",
      "field2": "Unknown"
    },
    "doc_count": 1
  },
  {
    "key": {
      "field1": "Device 2",
      "field2": "Unknown"
    },
    "doc_count": 4
  },
  {
    "key": {
      "field1": "Device 3",
      "field2": "Unknown"
    },
    "doc_count": 1
  },
  {
    "key": {
      "field1": "Device 4",
      "field2": "1.6.0"
    },
    "doc_count": 1
  },
  {
    "key": {
      "field1": "Device 4",
      "field2": "1.6.1"
    },
    "doc_count": 138
  }
]

// 步骤1:提取x轴类目(所有设备)和堆叠系列(所有版本)
const xAxisData = Array.from(new Set(data.map(item => item.key.field1)))
const versionList = Array.from(new Set(data.map(item => item.key.field2)))

// 步骤2:构造 设备-版本 数值映射表,方便快速查找
const valueMap = {}
data.forEach(item => {
  const device = item.key.field1
  const version = item.key.field2
  if (!valueMap[device]) valueMap[device] = {}
  valueMap[device][version] = item.doc_count
})

// 步骤3:生成ECharts需要的series配置
const series = versionList.map(version => {
  return {
    name: version,
    type: 'bar',
    stack: 'total',
    // 严格按照x轴设备顺序填充数值,不存在的版本填0
    data: xAxisData.map(device => valueMap[device]?.[version] || 0)
  }
})

// 最终ECharts配置
option = {
  tooltip: {
    trigger: 'axis',
    axisPointer: {
      type: 'shadow'
    }
  },
  legend: {},
  grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  },
  xAxis: {
    type: 'category',
    data: xAxisData
  },
  yAxis: {
    type: 'value'
  },
  series: series
}

实现说明

  • 不需要对原始数据做提前排序,映射表会自动匹配对应数值
  • 每个版本的data数组严格和x轴的设备顺序一一对应,不存在的版本自动补0,完全符合ECharts的堆叠柱状图数据规则
  • 后续如果新增设备或者版本,代码不需要修改,自动适配新数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:24:06