Как отобразить метку справа от оси Y так же, как слева от оси Y ChartJS - PullRequest
0 голосов
/ 29 февраля 2020

Я создал линейную диаграмму, которая показывает суммы на левой стороне оси Y. Теперь я должен показать процентное значение суммы левой оси Y на правой стороне оси Y.


<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
<div class="snippet-code">
<pre class="snippet-code-js lang-js prettyprint-override"><code>yAxes: [
                        {   
                            id: 'A',
                            fontFamily: "DINPRO, Arial, sans-serif",
                            ticks: {
                                callback: (value, index, values) => {
                                    window.values = values;
                                    let newValue = value;
                                    if (value >= 1000) {
                                        newValue = Math.floor(newValue / 1000);
                                        newValue += " Tsd.";
                                    }
                                    return newValue;
                                }
                            },
                            position: "left",
                            gridLines: {}
                        },
                        {   id: "B",
                            type: "linear",
                            display: true,
                            fontFamily: "DINPRO, Arial, sans-serif",
                            position: "right",
                            ticks: {
                              callback: (value, index, values) => {
                                // Here I will write percentage calculation logic but the values coming here is not same as left side of Y axis.
                            }
                        },

                    ]
Заранее спасибо !

1 Ответ

0 голосов
/ 01 марта 2020

На основе кода, найденного на Создание нескольких осей из диаграммы. js Документация, это можно сделать следующим образом:

const data = [20, 50, 78, 24, 18, 35];
const maxValue = Math.max.apply(null, data);

var myChart = new Chart("myChart", {
  type: 'line',
  data: {
    labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
    datasets: [{
      label: 'My Dataset',
      data: data     
    }]    
  },
  options: {    
    tooltips: {
      mode: 'x',
      callbacks: {
        label: (tooltipItem, data) => {
          var label = data.datasets[tooltipItem.datasetIndex].label || '';
          var percent = Math.round(1000 / maxValue * tooltipItem.yLabel) / 10;
          return label + ' ' + tooltipItem.yLabel + ' (' + percent + '%)';
        }
      }
    },
    scales: {
      yAxes: [{
        type: 'linear',
        ticks: {
          min: 0,
          max: maxValue,
          stepSize: maxValue / 10,
          callback: value => Math.round((100 / maxValue * value)) + '%'     
        }
      }, {
        type: 'linear',
        position: 'right',
        gridLines: {
          display: false
        },
        ticks: {
          min: 0,
          max: maxValue,
          stepSize: 1,
          autoSkip: false,
          callback: value => value % 10 == 0 || value == maxValue ? value : ''
        }
      }]
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<canvas id="myChart" height="90"></canvas>
...