Как получить доступ к определенным значениям данных из всплывающей подсказки — Chart.js

#javascript #chart.js

#javascript #chart.js

Вопрос:

Я пытаюсь передать массив объектов в виде данных в данные графика, включая значение для x и некоторые другие значения, которые будут использоваться в каждой всплывающей подсказке.

В моем массиве данных каждый объект содержит значения для x и value переменных. Я хочу получить доступ к этому value внутри tooltips и, наконец, отобразить значение внутри всплывающей подсказки, которая появляется при наведении курсора мыши на каждый график данных.

Вот мой код:

 var myChart = new Chart(ctx, {
  type: 'line',
  data: {
    labels: ['2017/06/12', '2017/06/23', '2017/07/12', '2017/07/23', '2017/08/12', '2017/08/23', '2017/09/12'],
    datasets: [{
      label: 'Values',
      data: [{
          y: 12,
          value: 12
        },
        {
          y: 3,
          value: 13
        },
        {
          y: 1,
          value: 15
        },
        {
          y: -3,
          value: 5
        },
        {
          y: 67,
          value: 18
        },
        {
          y: 12,
          value: 11
        },
        {
          y: 13,
          value: 19
        }
      ],
      fill: false,
      backgroundColor: [
        'rgba(255, 99, 132, 0.2)',
        'rgba(54, 162, 235, 0.2)',
        'rgba(255, 206, 86, 0.2)',
        'rgba(75, 192, 192, 0.2)',
        'rgba(153, 102, 255, 0.2)',
        'rgba(255, 159, 64, 0.2)'
      ],
      borderColor: [
        'rgba(255, 99, 132, 1)',
        'rgba(54, 162, 235, 1)',
        'rgba(255, 206, 86, 1)',
        'rgba(75, 192, 192, 1)',
        'rgba(153, 102, 255, 1)',
        'rgba(255, 159, 64, 1)'
      ],
      borderWidth: 2
    }]
  },
  options: {
    tooltips: {
      // HERE I WANT TO ACCESS VALUE VARIABLE AND DISPLAY IT IN TOOLTIP
    },
    responsive: true,
    maintainAspectRatio: false,
    scales: {
      yAxes: [{
        ticks: {
          beginAtZero: true
        }
      }]
    }
  }
});
  

Ответ №1:

Chart.js В документах всплывающих подсказок есть раздел об обратном вызове метки, в котором показано, как можно указать текст, отображаемый для данной точки данных. Вам необходимо написать функцию, которая поставляется со следующими параметрами:

 tooltips: {
  callbacks: {
    label: function(tooltipItem, data) {
      return '...';
    }
  }
}
  

Раздел интерфейса элемента всплывающей подсказки показывает, через какую информацию передается обратный tooltipItem вызов. Важными из них являются datasetIndex (индекс набора данных, из которого получен элемент) и index (индекс этого элемента данных в наборе данных). Используя их, вы можете получить доступ к нужному элементу внутри data .

Вот очень простой пример доступа y к и value во всплывающей подсказке

Скрипта backgroundColor / borderColor удалена, поскольку это вызывает ошибку):

 tooltips: {
  callbacks: {
    label: function(tooltipItem, data) {
      var item = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
      return item.y    ' '   item.value;
    }
  }
}
  

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

1. Спасибо! это делает то, что я хочу. Однако всплывающие подсказки появляются только тогда, когда заданы отдельные значения для borderColor и backgroundColor, но это серьезная проблема.

2. Я не знаю, будет ли это работать для линейной диаграммы. Смотрите Проблему с обходным решением здесь: github.com/chartjs/Chart.js/issues/2430

3. К сожалению, data параметр больше не доступен в ChartJS 4.x.x. Как указано в руководстве по миграции 3.x : «Обратным вызовам больше не присваивается параметр данных. Параметр элемента всплывающей подсказки вместо этого содержит диаграмму и набор данных. »