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

使用Chart.js绘制分组柱状图,如何为每个柱状条添加对应名称?

解决Chart.js分组柱状图柱状条名称显示问题

核心思路
要给分组柱状图的每个柱子单独设置名称,需要调整后端返回的数据结构,让每个分组下的柱子数据携带名称信息,再通过Chart.js的tooltips或plugins(v3+用tooltip)来自定义提示内容,或者通过dataLabels插件直接在柱子上显示名称。

步骤1:调整后端数据格式

把原来的分组数据改成包含分组类型、柱子名称、数值的结构,比如返回一个数组:

// 后端返回的JSON结构示例
[
  { "group": "Interface", "name": "NASC-02", "value": 10 },
  { "group": "Interface", "name": "NASC-03", "value": 15 },
  { "group": "Function", "name": "FUNC-01", "value": 8 },
  { "group": "Function", "name": "FUNC-02", "value": 12 }
]

步骤2:前端处理数据并配置Chart.js

处理数据

先把后端数据转换成Chart.js需要的结构:

// 假设后端返回的数据存在response.data中
const rawData = response.data;
const groups = [...new Set(rawData.map(item => item.group))]; // ["Interface", "Function"]
const datasets = groups.map(group => {
  const groupData = rawData.filter(item => item.group === group);
  return {
    label: group,
    data: groupData.map(item => item.value),
    // 存储柱子名称,后续tooltip用
    names: groupData.map(item => item.name)
  };
});

配置Chart.js(v3+版本)

通过tooltip的回调函数显示柱子名称,或者用chartjs-plugin-datalabels直接在柱子上标注:

// 引入chartjs-plugin-datalabels(如果需要柱子上显示名称)
import ChartDataLabels from 'chartjs-plugin-datalabels';

const chart = new Chart(document.getElementById('myChart'), {
  type: 'bar',
  data: {
    labels: groups, // X轴分组
    datasets: datasets
  },
  options: {
    responsive: true,
    plugins: {
      tooltip: {
        callbacks: {
          // 自定义tooltip内容,显示柱子名称和数值
          label: function(context) {
            const dataset = context.dataset;
            const name = dataset.names[context.dataIndex];
            return `${name}: ${dataset.data[context.dataIndex]}`;
          }
        }
      },
      // 如果需要在柱子上显示名称,启用datalabels插件
      datalabels: {
        anchor: 'end',
        align: 'top',
        formatter: function(value, context) {
          return context.dataset.names[context.dataIndex];
        }
      }
    },
    scales: {
      x: {
        stacked: false, // 分组柱状图关闭堆叠
        title: {
          display: true,
          text: '类型'
        }
      },
      y: {
        title: {
          display: true,
          text: '数值'
        }
      }
    }
  },
  plugins: [ChartDataLabels] // 注册插件
});

步骤3:旧版Chart.js(v2)适配

如果用的是v2版本,配置逻辑类似,只是tooltip和插件配置位置不同:

const chart = new Chart(document.getElementById('myChart'), {
  type: 'bar',
  data: {
    labels: groups,
    datasets: datasets
  },
  options: {
    tooltips: {
      callbacks: {
        label: function(tooltipItem, data) {
          const dataset = data.datasets[tooltipItem.datasetIndex];
          const name = dataset.names[tooltipItem.index];
          return `${name}: ${dataset.data[tooltipItem.index]}`;
        }
      }
    },
    plugins: {
      datalabels: {
        formatter: function(value, context) {
          return context.dataset.names[context.dataIndex];
        }
      }
    }
  },
  plugins: [ChartDataLabels]
});

关键说明

  • 后端数据调整是核心:必须把每个柱子的名称和所属分组、数值绑定,这样前端才能准确对应。
  • 如果不需要在柱子上显示名称,只需要tooltip显示,不用引入chartjs-plugin-datalabels,仅配置tooltip回调即可。
  • 分组柱状图的X轴是分组(Interface/Function),每个分组下的多个柱子由不同dataset或者同一dataset的多个数据点实现(这里用的是多个dataset,每个dataset对应一个分组下的所有柱子)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:12:48