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

如何在Highcharts中实现主类别对应不同子类别的堆叠柱状图

Highcharts实现子功能数量不统一的堆叠柱状图

需求说明

产品按主功能-子功能层级分类,需制作堆叠柱状图:

  • 每个主功能(如通信、导航)对应一个柱状条
  • 主功能下的子功能作为堆叠子条,不同主功能的子功能数量可不同
  • 现有嵌套字典格式数据:
const rawData = {
  '通信': {'通话': 69.0, '听声': 17.0, '字幕': 3.0},
  '导航': {'GPS定位': 41.0, '路线规划': 49.0},
  '娱乐': {'音频播放': 9.0, '视频播放': 11.0, '游戏': 19.0, '直播': 10.0}
};

解决方案步骤

1. 数据转换(无需重复拷贝)

直接从原始数据提取所有唯一子功能,为每个子功能生成对应的Highcharts系列数据,缺失子功能的主功能自动补0:

// 提取主功能列表作为X轴标签
const mainFunctions = Object.keys(rawData);
// 提取所有唯一子功能
const allSubFunctions = [...new Set(mainFunctions.flatMap(func => Object.keys(rawData[func])))];

// 生成每个子功能对应的系列数据
const series = allSubFunctions.map(subFunc => {
  return {
    name: subFunc,
    data: mainFunctions.map(func => rawData[func][subFunc] || 0)
  };
});

2. Highcharts配置实现堆叠

配置图表类型为column,开启堆叠模式,关联转换后的数据:

Highcharts.chart('container', {
  chart: {
    type: 'column'
  },
  title: {
    text: '产品功能分布堆叠柱状图'
  },
  xAxis: {
    categories: mainFunctions,
    title: {
      text: '主功能'
    }
  },
  yAxis: {
    min: 0,
    title: {
      text: '占比/数值'
    },
    stackLabels: {
      enabled: true,
      style: {
        fontWeight: 'bold',
        color: (Highcharts.theme && Highcharts.theme.textColor) || 'gray'
      }
    }
  },
  legend: {
    align: 'right',
    x: -30,
    verticalAlign: 'top',
    y: 25,
    floating: true,
    backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || 'white',
    borderColor: '#CCC',
    borderWidth: 1,
    shadow: false
  },
  tooltip: {
    headerFormat: '<b>{point.x}</b><br/>',
    pointFormat: '{series.name}: {point.y}<br/>总计: {point.stackTotal}'
  },
  plotOptions: {
    column: {
      stacking: 'normal',
      dataLabels: {
        enabled: true,
        color: (Highcharts.theme && Highcharts.theme.dataLabelsColor) || 'white'
      }
    }
  },
  series: series
});

3. 配色优化(匹配目标风格)

参考目标图的柔和低饱和配色,可通过colors配置自定义系列颜色:

colors: ['#7CB5EC', '#90ED7D', '#F7A35C', '#8085E9', '#F15C80', '#E4D354'],

也可使用Highcharts内置配色主题,或通过在线配色工具生成协调的低饱和色系,确保不同子功能色块区分清晰且视觉舒适。

关键优势

  • 无需将原始数据转成纯数组再通过索引关联标签,直接从嵌套字典生成系列,避免数据冗余
  • 自动适配不同主功能的子功能数量差异,缺失子功能自动补0不影响堆叠效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:07:36