ChartsJS 线图中的自定义刻度

alj*_*adi -1 chart.js

以 ChartsJS 线图为例 ( https://www.chartjs.org/docs/latest/charts/line.html )。如何更改 Y 轴,使其仅显示两个标签:“更少”位于最大 Y 值的 25% 处,“更多”位于最大 Y 值的 75% 处?

umi*_*der 5

这可以通过在 y 轴上定义afterBuildTicks和函数来完成。ticks.callback

请看一下下面的可运行代码并了解它是如何工作的。

new Chart('my-chart', {
  type: 'line',
  data: {
    labels: ['A', 'B', 'C', 'D', 'E', 'F', 'G'],
    datasets: [{
      label: 'My Data',
      data: [65, 59, 80, 81, 56, 55, 40],
      borderColor: '#1f77b4'
    }]
  },
  options: {
    scales: {
      y: {    
         afterBuildTicks: axis => {
           let values = axis.ticks.map(t => t.value);
           let max = Math.max(...values);
           let min = Math.min(...values);
           axis.ticks = [
             { value: min + (max - min) * 0.25 },
             { value: min + (max - min) * 0.75 }
           ]
         },         
         ticks: {
           callback: (v, i) => i ? 'more' : 'less'
         }
      }
    }
  }
});
Run Code Online (Sandbox Code Playgroud)
canvas {
  max-height: 200px;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.5.1/chart.min.js"></script>
<canvas id="my-chart"></canvas>
Run Code Online (Sandbox Code Playgroud)