You need to enable JavaScript to run this app. Chart.js 如何仅放大Y轴0-10区间的显示精度以展示全部分度值
优惠活动
大模型
产品
解决方案
定价
更多

Chart.js 如何仅放大Y轴0-10区间的显示精度以展示全部分度值

实现方案

通过Y轴刻度配置+数值映射的方式即可实现需求,无需额外插件,兼容Chart.js v3/v4所有主流版本,修改后的完整代码如下:

const data = {
  labels: dates,
  datasets: [{
    label: 'SIS',
    backgroundColor: 'rgb(255, 99, 132)',
    borderColor: 'rgb(255, 99, 132)',
    // 大于10的数值做压缩映射,实现0-10区间放大2倍效果
    data: sis_data.map(val => val > 10 ? 10 + (val - 10)/2 : val),
  },
  {
    label: 'Mood',
    backgroundColor: 'rgb(99, 255, 132)',
    borderColor: 'rgb(99, 255, 132)',
    data: mood_data.map(val => val > 10 ? 10 + (val - 10)/2 : val),
  },
  {
    label: 'Sleep',
    backgroundColor: 'rgb(99, 132, 255)',
    borderColor: 'rgb(99, 132, 255)',
    data: sleep_data.map(val => val > 10 ? 10 + (val - 10)/2 : val),
  }]
};

const config = {
  type: 'line',
  data,
  options: {
    scales: {
      y: {
        min: 0,
        ticks: {
          // 步长设为1,保证0-10区间每个整数都作为独立刻度展示
          stepSize: 1,
          // 刻度回调还原真实数值
          callback: function(tickVal) {
            return tickVal > 10 ? Math.round(10 + (tickVal - 10)*2) : tickVal
          }
        }
      }
    },
    plugins: {
      tooltip: {
        callbacks: {
          // 悬浮提示还原真实数值
          label: function(context) {
            let rawVal = context.parsed.y
            rawVal = rawVal > 10 ? Math.round(10 + (rawVal - 10)*2) : rawVal
            return `${context.dataset.label}: ${rawVal}`
          }
        }
      }
    }
  }
};

var myChart = new Chart(
    document.getElementById('myChart'),
    config
);

配置说明

  • 先对所有大于10的原始数据做压缩映射,将10以上的区间压缩为原来的1/2,对应0-10区间的视觉占比就会放大为原来的2倍
  • Y轴ticks.stepSize设为1,保证0-10区间的每个整数都会生成独立刻度
  • 刻度和悬浮提示的回调函数负责将映射后的数值还原为真实值,用户侧不会感知到映射逻辑
  • 如果原始数据包含小数,将回调中的Math.round替换为toFixed(你需要保留的小数位数)即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 09:06:04