Подтвердить что ты не робот

Легенда круговой диаграммы - Chart.js

Мне нужна помощь, чтобы поместить число круговой диаграммы в легенду

Изображение диаграммы

Если я нахожу диаграмму с мышью, я могу видеть число относительно каждого элемента

Я хочу отобразить его в легенде либо

важный код:

var tempData = {
    labels: Status,
    datasets: [
        {
            label: "Status",
            data: Qtd,
            backgroundColor: randColor
        },

    ]
};

var ctx = $("#pieStatus").get(0).getContext("2d");
var chartInstance = new Chart(ctx, {
    type: 'pie',
    data: tempData,
    options: {
         title: {
            display: true,
            fontsize: 14,
            text: 'Total de Pedidos por Situação'
        },
        legend: {
            display: true,
            position: 'bottom',

        },
        responsive: false
    }

});

"Qtd", "randColor" являются "var" уже со значениями

4b9b3361

Ответ 1

Вам нужно отредактировать свойство generateLabels в своих настройках:

options: {
    legend: {
        labels: {
            generateLabels: function(chart) {
                 // Here
            }
        }
    }
}


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

Вот small jsFiddle, где вы можете увидеть, как он работает (отредактированные строки - из 38 - прокомментированы) и его результат:

введите описание изображения здесь

Ответ 2

Я хотел позволить пользователю выбирать из наборов данных 100+, но вместо того, чтобы добавлять/удалять их из моей диаграммы, я решил установить showLine: false для любого набора данных, который я хочу скрыть. К сожалению, легенда по умолчанию покажет все 100+. Поэтому в моем решении я генерирую легенду вручную, отфильтровывая любой набор данных, который имеет showLine: false.

Ваши настройки будут иметь это:

legend: {
  labels: {
    generateLabels: (a) => {
      return a.data.labels
    }
  }

И вы создадите свои собственные метки с помощью вспомогательной функции:

function updateAllLabels() {
  const myNewLabels = [];

  myChart.data.datasets.forEach((element) => {
    if (element.showLine) {
      myNewLabels.push(generateLabel(element));
    }
  });

  myChart.data.labels = myNewLabels;
}

И вы сгенерируете метку с другой функцией:

function generateLabel(data) {
  return {
    fillStyle: data.borderColor,
    lineWidth: 1,
    strokeStyle: data.borderColor,
    text: data.countyName, // I attach countryName to my datasets for convenience
  }
}

Теперь просто не забудьте вызывать функцию при обновлении графика:

updateAllLabels();
myChart.update();

Приятного графика!