Chart.js не показывает динамически заполненные данные

1

У меня возникли проблемы при попытке динамического заполнения гистограммы в chart.js. У меня есть два массива, один для ярлыка, один по цене, и оба они уже заполнены отсортированными данными из firebase. Вот мой код:

var ctx = document.getElementById('brandChart').getContext("2d");

        var data = {
            labels: [],
            datasets: [{
            data: [],
            backgroundColor: [
                "#424242",
                ]
            }]
        };

        var options = {
            layout: {
                padding: {
                  top: 5
                }
            },
            responsive: true,
            legend: {
                display: true,
                position: 'bottom',
                // disable legend onclick remove slice
                onClick: null
            },
            animation: {
                animateScale: true,
                animateRotate: true
            },
        };

        var opt = {
          type: "horizontalBar",
          data: data,
          options: options
        };

        if (brandChart) brandChart.destroy();
        brandChart = new Chart(ctx, opt);

        // dynamically populate chart
        for(var i = 0; i < labelData.length; i++){
            brandChart.config.data.labels.push(labelData[i]);
        }
        for(var i = 0; i < priceData.length; i++){
            brandChart.config.data.datasets[0].data.push(priceData[i]);
        }

        brandChart.update();    

Мне удалось показать все их на гистограмме, однако результат как таковой:

Это вид сжатия между этими ярлыками, если слишком много категорий. Кроме того, только первый бар имеет цвет и легенды, показанные undefined. Есть идеи, как их решить?

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

Теги:
chart.js
charts

1 ответ

1
Лучший ответ

ɪꜱꜱᴜᴇ # 1 - ꜱᴏʟᴜᴛɪᴏɴ

Добавьте обратный вызов для тиков оси y в параметрах диаграммы:

options: {
   scales: {
      yAxes: [{
         ticks: {
            callback: function(t, i) {
               if (!(i % 2)) return t;
            }
         }
      }]
   },
   ...
}

это будет показывать только любую другую метку по оси y.

ɪꜱꜱᴜᴇ # 2 - ꜱᴏʟᴜᴛɪᴏɴ

Это связано с тем, что у вас есть только один цвет в вашем массиве backgroundColor. Если вам нужен другой цвет для каждого бара, вам нужно заполнить этот массив несколькими значениями цвета.

Изменить: поскольку это похоже на ваш обновленный вопрос, у вас уже есть идея.

ɪꜱꜱᴜᴇ # 3 - ꜱᴏʟᴜᴛɪᴏɴ

Определите свойство label для вашего dataset, например:

datasets: [{
   label: 'Legend Title', //<- define this
   data: [],
   backgroundColor: ["#424242", ]
}]
  • 0
    Спасибо за ответ! Но на графике для отредактированной части ничего не показано. У вас есть идеи, почему это так? Из массива данных распечатано что-то, только на самой диаграмме ничего не было показано
  • 0
    вы не data массив data должным образом. хорошо подумай
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню