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

Chart.js 3.5.1条形图如何为每个柱子添加数值标签

Chart.js 3.x 条形图添加柱子数值标签解决方案

方案一:使用官方datalabels插件(最简实现)

这是最适合新手的方案,不需要写复杂的自定义绘制逻辑,配置即可生效:

  • 第一步:引入配套插件
    可通过npm安装或者CDN引入适配Chart.js 3.x的2.x版本chartjs-plugin-datalabels插件,确保在Chart.js加载完成后再引入该插件。
  • 第二步:修改图表配置
    你需要在原有配置的基础上,注册插件、添加标签配置即可,修改后的完整代码如下:
    // 注册插件
    Chart.register(ChartDataLabels);
    
    let chart2 = new Chart('chart2', {
      type: 'bar',
      data: {
        labels: ["a", "b", "c", "d"],
        datasets: [{
          data: [500, 400, 300, 200],
        }]
      },
      options: {
        indexAxis: 'y',
        plugins: {
          title: {
            display: true,
            text: "Graph"
          },
          legend: {
            display: false,
          },
          // 新增datalabels配置
          datalabels: {
            // 标签显示内容为数值
            formatter: (value) => value,
            // 标签位置:柱子右侧
            anchor: 'end',
            align: 'right',
            // 标签颜色,可根据需求调整
            color: '#000',
            // 标签和柱子的间距
            offset: 4
          }
        },
        scales: {
          y: {
            grid: {
              display: false
            },
          },
          x: {
            grid: {
              display: false
            },
            // 给x轴加10%的额外 padding,避免标签超出画布被截断
            max: (context) => context.chart.data.datasets[0].data.reduce((a,b) => Math.max(a,b), 0) * 1.1
          }
        }
      },
      // 激活插件
      plugins: [ChartDataLabels]
    });
    

方案二:无插件自定义实现

如果不想引入额外插件,可以通过动画完成回调手动绘制标签:

let chart2 = new Chart('chart2', {
  type: 'bar',
  data: {
    labels: ["a", "b", "c", "d"],
    datasets: [{
      data: [500, 400, 300, 200],
    }]
  },
  options: {
    indexAxis: 'y',
    animation: {
      onComplete: function() {
        const ctx = this.ctx;
        ctx.font = '12px sans-serif';
        ctx.fillStyle = '#000';
        ctx.textAlign = 'left';
        ctx.textBaseline = 'middle';
        this.data.datasets[0].data.forEach((value, index) => {
          const meta = this.getDatasetMeta(0);
          const bar = meta.data[index];
          ctx.fillText(value, bar.x + 4, bar.y);
        })
      }
    },
    plugins: {
      title: {
        display: true,
        text: "Graph"
      },
      legend: {
        display: false,
      }
    },
    scales: {
      y: {
        grid: {
          display: false
        },
      },
      x: {
        grid: {
          display: false
        },
        max: 550
      }
    }
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:30:00