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

Chart.js多数据集柱状图标签颜色异常,请问代码存在什么问题?

问题原因

你配置backgroundColor和borderColor时错误使用了数组类型,导致颜色不匹配。
当你给单个数据集的颜色属性传数组时,Chart.js会认为你要给这个数据集下的每个柱子单独指定颜色,会按柱子索引取数组对应位置的颜色值。你数组里只有1个颜色值,超出索引的柱子就会自动调用Chart.js默认的全局色板,就会出现前一个柱子颜色匹配配置,后续柱子颜色不对的问题。

修复方案

把两个数据集的backgroundColor、borderColor属性从数组改成直接传字符串即可,修改后的代码如下:

<script type="text/javascript">
    var dataname = @Html.Raw(Json.Serialize(ViewBag.performancename));
    var dataquo = @Html.Raw(Json.Serialize(ViewBag.performancequo));
    var datapo = @Html.Raw(Json.Serialize(ViewBag.performancepo));
    var ctx = document.getElementById('canvasx5');

    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: dataname,
            datasets: [{
                label: 'QUO',
                fill: true,
                // 去掉数组括号,直接传颜色字符串
                backgroundColor: 'rgba(255, 99, 132, 0.8)',
                borderColor: 'rgba(255, 99, 132, 1)',
                borderWidth: 1,
                data: dataquo
            },
            {
                label: 'PO',
                fill: true,
                // 去掉数组括号,直接传颜色字符串
                backgroundColor: 'rgba(75, 192, 192, 0.8)',
                borderColor: 'rgba(75, 192, 192, 1)',
                borderWidth: 1,
                data: datapo
            }]
        },
        borderWidth: 1,
        options: {
            legend: {
                display: true,
            },
            scales: {
                xAxes: [{
                    stacked: false,
                    barPercentage: 0.8,
                    gridLines: {
                        offsetGridLines: true
                    }
                }],
                yAxes: [{
                    stacked: false,
                    ticks: {
                        beginAtZero: true,
                        stepSize: 2,
                        min: 0
                    }
                }]
            }
        }
    });
</script>

额外说明

如果你确实需要给同一个数据集下的不同柱子设置不同颜色,才需要用数组传值,示例如下:

backgroundColor: [
  'rgba(255, 99, 132, 0.8)', // 第一个柱子颜色
  'rgba(54, 162, 235, 0.8)', // 第二个柱子颜色
  'rgba(255, 206, 86, 0.8)'  // 第三个柱子颜色
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:24:00