Chart.js разделите размер шага на равное количество шагов

#javascript #charts #chart.js3

#javascript #Диаграммы #диаграмма.js3

Вопрос:

Используя chart.js 3.x , как разделить ось Y на равное количество шагов, которое не должно превышать общее количество трех шагов.

Пример диаграммы,
я установил размер шага, который разделит ось Y на три равных шага, но он игнорируется.
https://jsfiddle.net/0awxe539/3/

 Step size calculation: 
stepSize = ((Math.abs(min)   max) / 2); 
 

Я хочу, чтобы ось Y была разделена максимум на три равных шага.
Если min is 0 и max is 0.5 , то на диаграмме должны быть шаги 0 , 0.25 и 0.5 .

Добавление maxTicksLimit:3 имеет некоторое случайное поведение, и иногда я вижу только 2 тика, а не три.

Кроме того, данные моей диаграммы являются динамическими, и я вычисляю и обновляю минимальный, максимальный и размер шага во время выполнения.

Ответ №1:

Я думаю, вы не можете использовать как maxTicksLimit, так и stepsize вместе. Один из способов решить эту проблему — объявить данные перед конфигурацией и вычислить размер шага там. Затем вы можете поместить оттуда значения max, min и stepsize. Я также использовал fixedStepSize .

 let data =[
    {x:1, y:0.49},
  {x:2, y:0.6},
  {x:3, y:-0.18},
  {x:4, y:0.76},
  {x:5, y:0.48},
  {x:6, y:0.76},
  {x:7, y:0.1},
  {x:8, y:-0.24},
  {x:9, y:0.34},
  {x:10, y:0.42},
  {x:11, y:0.79},
  {x:12, y:-0.21}
]

let values = data.map(item => item.y)
let min = Math.min(...values)
let max = Math.max(...values)
let stepSize = ((Math.abs(min)   max) / 2); 

var config = {
  type: 'scatter',
  data: {
    datasets: [{
      label: "My First dataset",
      backgroundColor: chartColors.red,
      borderColor: chartColors.red,
      showLine: true,
      data: data,
      lineTension: 0,
      fill: false,
    },]
  },
  options: {
    responsive: true,
    title: {
      display: true,
      text: 'Chart.js Line Chart'
    },
    tooltips: {
      mode: 'label',
    },
    hover: {
      mode: 'nearest',
      intersect: true
    },
    scales: {
      xAxes: {
        display: true,
        scaleLabel: {
          display: true,
          labelString: 'Test'  
        },
        ticks:
        {
            min: 1,
            max:17,
            stepSize: 5,
        },
        distribution: 'linear',
      },
      yAxes: {
        display: true,
        beginAtZero: true,
        type: 'linear',
        max: max,
        min: min,
        ticks: {
          fontColor: "#ffffff",
          stepSize: stepSize,
          fixedStepSize:stepSize,
        },
        scaleLabel: {
          display: true,
          labelString: 'Value'
        }
      }
    }
  }
};
 

Комментарии:

1. Мои данные являются динамическими, и я выполняю вычисление размера шага во время выполнения. Также min max обновляется во время выполнения, но диаграмма игнорирует размер шага в соответствии с заданной скрипкой.