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

Chart.js柱状图高度不足求助:数据标签被截断

问题描述

使用Chart.js渲染柱状图时,其余功能正常,但图表垂直高度不足,导致数据显示异常——100%的标签被截断,仅显示“1”。尝试过在div标签中设置高度,以及开启responsive:true,但会导致图表严重拉伸,标签、柱状条等元素模糊不清。

现有代码

JavaScript代码

document.addEventListener("DOMContentLoaded", function() {
    var patternSize = 20;
    // Bar chart
    new Chart(document.getElementById("mychart"), {
        type: "bar",
        data: {
            labels: ["1.1","1.2","1.3","1.4","1.5","2.1","2.2","2.3","2.4","2.5","2.6","2.7","2.8","3.1","3.2","3.3","3.4","3.5","4.1","4.2","4.3","4.4","4.5",],
            datasets: [{
                label: "Progress",              
                backgroundColor:"#ff0000",
                data: [74.5,70.8,20,16.7,0,90,43.3,17.8,37.5,100,11.3,4.6,0,100,12.5,0,15,0,44.4,0,0,0,20,],        
            }
        ]
        },
        options: {  
//          responsive: true,           
            maintainAspectRatio: false, 
            legend: {
            display: true,
            position: 'bottom',
            },      
            scales: {
                yAxes: [{
                    gridLines: {
                        display: true
                    },
                    stacked: false,
                    ticks: {
                        stepSize: 20,
                        callback: function(value, index, ticks) {
                        return  value + '%';
                        }
                    },
                    scaleLabel: {
                        display: true,
                        fontSize: 18,
                        fontColor:"#000000",
                        fontStyle: "bold",
                        labelString: 'Percentages'
                    }
                }],
                xAxes: [{
                    stacked: false,
                    gridLines: {
                        display:false
                    },              
                    ticks:{
                        maxRotation: 90,
                        minRotation: 90,
                    },          
                    scaleLabel: {
                        display: true,
                        fontSize: 18,
                        fontColor:"#000000",
                        fontStyle: "bold",
                        labelString: 'ACTIVITY'                         
                    }
                }]
            },
        }, //end options
/**value on top of bar**/

plugins: {
      
      afterDatasetsDraw: function (context, easing) {
        var ctx = context.chart.ctx;
        context.data.datasets.forEach(function (dataset) {
          for (var i = 0; i < dataset.data.length; i++) {
            if (dataset.data[i] != 0) {
              var model = dataset._meta[Object.keys(dataset._meta)[0]].data[i]._model;
              var textY = model.y + (dataset.type == "line" ? -3 : 15);

              ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, 'normal', Chart.defaults.global.defaultFontFamily);
              ctx.textAlign = 'start';
              ctx.textBaseline = 'middle';
              ctx.fillStyle = dataset.type == "line" ? "black" : "black";
              ctx.save();
              ctx.translate(model.x, textY-15);
              ctx.rotate(4.7);
              data=" "+dataset.data[i]+"%";
              ctx.fillText(data, 0, 0);
              ctx.restore();
            }
          }
        });
      }
    
  }                                                 
/**end value on top of bar**/
    });
});

HTML代码

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js"></script>
<div class="chart chart-lg" id="chart-wrapper">
<canvas id="mychart"></canvas>
</div>
解决方法
  • 给容器设置固定高度+保留响应式
    开启responsive: true,给图表容器#chart-wrapper设置合适的固定高度,同时保持maintainAspectRatio: false,这样图表会自适应容器尺寸,不会模糊:

    #chart-wrapper {
        height: 600px;
        width: 100%;
    }
    
  • 调整Y轴顶部内边距
    在Y轴配置中添加ticks.padding,预留足够空间显示顶部标签:

    yAxes: [{
        // 其他现有配置...
        ticks: {
            padding: 20, // 增加顶部内边距
            stepSize: 20,
            callback: function(value, index, ticks) {
                return value + '%';
            }
        }
    }]
    
  • 优化顶部标签绘制位置
    自定义标签的代码中,调整textY的偏移值,让标签更靠上,避免被截断:

    var textY = model.y + (dataset.type == "line" ? -10 : 5); // 减少向下偏移量
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:48:20