如何在 ChartJS 中设置默认比例?

How to set defaults for scales in ChartJS?

如何在 ChartJS 中设置 scales 值的默认值?

我在一个页面上有一系列类似的图表,我想为它们设置一些常见的默认值,以避免为每个图表重复该配置。作为一个具体的例子,我想删除垂直网格线。要做到内联很简单:

options: {
    scales: {
        x: {
            grid: {
                display: false
            },
        },
    },
}

效果很好,但我不想在页面上重复 n 次。我尝试将其设置为默认值:

Chart.defaults.scales.x.grid.display = false;

但这会引发错误:

Uncaught TypeError: Cannot read properties of undefined (reading 'grid')

我发现文档非常混乱,但也许 this page 建议采用如下格式:

Chart.defaults.scales[scaleID].grid.display = false;

A different section of that same page 建议“默认的 scaleID ... 是 xy”。所以我尝试了:

Chart.defaults.scales[x].grid.display = false;

但这会引发一个新错误:

Uncaught ReferenceError: x is not defined

我放弃了对文档的猜测并尝试了:

console.dir(Chart.defaults.scales);

发现只有 categorytime 这样的类型。我尝试将它们设置为:

Chart.defaults.scales.category.grid.display = false;

又出现了一个新错误:

Uncaught TypeError: Cannot set properties of undefined (setting 'display')

// Works fine
Chart.defaults.plugins.legend.display = false;

// None of these work
// Chart.defaults.scale.x.grid.display = false;
// Chart.defaults.scales.x.grid.display = false;
// Chart.defaults.scales[x].grid.display = false;
// Chart.defaults.scales.xAxisID.grid.display = false;
// Chart.defaults.scales.category.grid.display = false;

const data = {
    labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
    datasets: [{
        data: [1, 2, 3, 4, 5, 6],
    }]
};

const config = {
    type: 'bar',
    data: data,
    options: {
        scales: {
        // This works, but how to set it as a default?
        /*
            x: {
                grid: {
                    display: false
                },
            },
        */
        },
    }
};

const chart = new Chart(
    document.getElementById('chart'),
    config
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.7.1/chart.min.js" integrity="sha512-QSkVNOCYLtj73J4hbmVoOV6KVZuMluZlioC+trLpewV8qMjsWqlIQvkn1KGX2StWvPMdWGBqim1xlC8krl1EKQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

<canvas id="chart"></canvas>

在写这篇文章时,explaining it to the duck,并确认每个错误我自己解决了问题。我想我会 post 反正我花了几个小时在这上面,我自己的搜索没有发现任何有用的东西,也许它会帮助未来的人甚至未来的我。

线索是我在上次尝试时遇到的新错误:

Chart.defaults.scales.category.grid.display = false;
// Uncaught TypeError: Cannot set properties of undefined (setting 'display')

因此 grid 未定义。作为一个疯狂的绝望猜测,我试过了:

Chart.defaults.scales.category.grid = {
    display: false
};

而且有效。