Chart.js实现无数据时隐藏并折叠X轴的方法
Chart.js动态折叠X轴刻度需求
我想用Chart.js制作图表,要求X轴仅显示存在对应数据的刻度。虽然可以提前预处理数据,移除无数据的标签及对应零值,但我需要的是图表展示后,隐藏/显示部分数据集时,图表能自动折叠并移除无数据的刻度。
预期效果示例
- 所有数据集可见时:

- 隐藏两个数据集后,部分月份从X轴消失:

注:该效果是通过Excel修改输入数据模拟得到的
我没有找到能直接实现此功能的轴属性——刻度可以单独显示或隐藏,但无法让轴上的空间折叠以消除空白。想问问能不能通过数据集隐藏/显示的回调函数来实现?
补充说明
基于他人提供的示例,我搭建了一个可运行的Demo,但隐藏2021和2022年的数据集后,部分月份仍处于空白状态,我希望这些无数据的月份能直接从图表中移除。
const config = { type: "bar", data: { labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], datasets: [ { label: '2020', data: [null, null, null, 2, 10,25,31,28,10,2, null, null], backgroundColor: 'red' }, { label: '2021', data: [1, 4 , 4, 6, 8, 23, 28, 30, 5, 1, null, null], backgroundColor: 'blue' }, { label: '2022', data: [1, 4 , 4, 4, 12, 30, 26, 30, 30, 10, 4, 4], backgroundColor: 'green' }, { label: '2023', data: [1, null , null, 4, 20, 29, 31, 31, 10, null, null, 2], backgroundColor: 'orange' }, ] }, options: { maintainAspectRatio: false, barPercentage: 0.99, categoryPercentage: 0.95, skipNull: true, scales:{ x: { ticks: { minRotation: 90 } } }, plugins: { legend: { display: true }, title: { display: true, text: 'Lifeguard working days', } } } }; const chart = new Chart('myChart', config);
另外,之前针对我另一问题的解决方案,并不适用于这种不同数据集共享X轴标签的场景。
内容的提问来源于stack exchange,提问作者nhaggen
相关产品推荐
相关产品推荐

