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

堆叠柱状图未占满100%高度问题求助

堆叠柱状图未占满100%高度问题求助

嘿,我来帮你排查这个问题!你遇到的50+50堆叠后没占满100%高度的情况,核心原因是Chart.js默认会根据单个数据集的最大值自动调整Y轴范围,而没有强制锁定到0-100的区间。

举个例子:你的两个数据集最大值都是50,Chart.js可能会把Y轴的默认最大值设为50,虽然堆叠后总和是100,但Y轴只显示到50,看起来柱子就只占了一半高度。

解决方案:强制设置Y轴范围

在你的options.scales.y配置里,加上min: 0和max: 100,同时可以把刻度格式改成百分比,让显示更直观:

new Chart(draw, {
  type: 'bar',
  data: {
    labels: [currentYear],
    datasets: [
      {
        label: 'Legend 1',
        data: [50],
        backgroundColor: '#fdfd96', // yellow
      },
      {
        label: 'Legend 2',
        data: [50],
        backgroundColor: '#77b5fe', // blue
      },
    ],
  },
  options: {
    scales: {
      x: {
        stacked: true,
      },
      y: {
        stacked: true,
        min: 0, // 强制Y轴从0开始
        max: 100, // 强制Y轴最大值为100
        ticks: {
          // 把刻度显示为百分比格式
          callback: function(value) {
            return value + '%';
          }
        }
      },
    },
    animation: {
      onComplete: function () {
        saveChartAsImage(
          this.toBase64Image(),
          currentYear,
          companyId,
          'actif',
          manualMode,
        );
      },
    },
  },
});

为什么这样有效?

  • *min: 0*确保Y轴从底部开始,不会截断柱子的底部部分;
  • *max: 100*锁定Y轴的最高值为100,刚好匹配你两个数据集的总和(50+50),这样堆叠后的柱子就能完全占满Y轴高度;
  • ticks.callback把数值转成百分比显示,让图表的含义更清晰。

如果还有问题,可以检查一下Chart.js的版本(某些旧版本的堆叠逻辑可能有差异),不过这个方案在v3及以上版本都是有效的哦!

备注:内容来源于stack exchange,提问作者aksl95

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 08:47:50