javascript - Chart.js - 如何将数组集合插入数据集

标签 javascript laravel chart.js chart.js2

我一直在尝试多种方法将数组集合推送到数据集中。 任何人都可以帮助我根据下面的代码将数组插入堆叠图表中?

这是示例

Codepen stacked bar

Javascript

const getData = ()=>new Array(7).fill('').map(v=>randomScalingFactor());

var barChartData = {
            labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
            datasets: [{
                label: 'Dataset 1',
                backgroundColor: window.chartColors.red,
                data: getData()
            }, {
                label: 'Dataset 2',
                backgroundColor: window.chartColors.blue,
                data: getData()
            }, {
                label: 'Dataset 3',
                backgroundColor: window.chartColors.green,
                data: getData()
            }]

        };
        var ctx = document.getElementById('canvas').getContext('2d');
            window.myBar = new Chart(ctx, {
                type: 'bar',
                data: barChartData,
                options: {
                    title: {
                        display: true,
                        text: 'Chart.js Bar Chart - Stacked'
                    },
                    tooltips: {
                        mode: 'index',
                        intersect: false
                    },
                    responsive: true,
                    scales: {
                        xAxes: [{
                            stacked: true,
                        }],
                        yAxes: [{
                            stacked: true
                        }]
                    }
                }
            });

        document.getElementById('randomizeData').addEventListener('click', function() {
            barChartData.datasets.forEach(dataset=>{
                dataset.data = getData();
            });
            window.myBar.update();
        });

这是数组的数据

enter image description here

问题应该是具有不同颜色的数据集,并且总计应该是 Y 轴的值,并且 X 轴应该有另一个数组日期集合,并且数据集的颜色应该不同。问题和总数的数据将从 Mysql 数据库中检索。

我使用的是 Laravel,上表是使用 foreach 循环实现的。

最佳答案

您确实应该提供更多信息。你尝试过什么,失败过什么... 不要指望人们会做你的工作,浪费他们的时间让你可以小睡一个小时。 StackOverflow 是针对特定问题的,而不是让别人做别人的工作。获取 chart.js 的数据是一件微不足道的事情,您可以在任何其他有关 chart.js 的文章中找到它。

咆哮已经够多了,只是让您知道您不应该期望将来会得到类似问题的答案。

  1. 您在问题中发布的代码与 codepen 链接中的代码完全不同,但这可能是由于 Narendra Jadhav 的“更新”所致。但如果让我很困惑,那么我不知道你想要什么。
  2. 您没有说明是否要更新我们的数据,因此我没有实现更新。
  3. 不知道这个随机 randomizeData() 的用例,尤其是固定长度 7。我更改了它,但因为我不知道它可能与您的用例。
  4. 我不知道您从 MySQL 获取的数据格式,因此我使用了可能的格式。与上面相同,可能与您想要的不同。
  5. 请使用较新版本的 chart.js,而不是一年前的版本。没有重大变化,只有改进。仅更新版本就消除了一些错误,例如y 轴和图表之间的奇怪空间。

完整代码(same as JSBin):

var initialData = [
  {
    'Barcode Sticker Problem':1,
    'Extra':1,
    'Labelling Problem':2,
    'Stock Accuracy':1,
    'Wrong Quality':1
  },{
    'Barcode Sticker Problem':1,
    'Extra':1,
    'Labelling Problem':2,
    'Stock Accuracy':1,
    'Wrong Quality':3
  },
  {
    'Barcode Sticker Problem':2,
    'Extra':2,
    'Labelling Problem':1,
    'Stock Accuracy':2,
    'Wrong Quality':3
  }
]

const colors = [
  'red',
  'blue',
  'green'
]

var barChartData = {
  labels: Object.keys(initialData[0]),
  datasets: []
};

for (var i = 0; i < initialData.length; i++) {
  barChartData.datasets.push(
    {
      label: 'Dataset ' + (i+1),
      backgroundColor: colors[i % colors.length],
      data: Object.values(initialData[i])
    }
  )
}

var barChartOptions = {
  title: {
    display: false,
    text: 'Chart.js Stacked Bar Chart'
  },
  tooltips: {
    mode: 'index',
    intersect: false
  },
  responsive: true,
  scales: {
    xAxes: [{
      stacked: true,
    }],
    yAxes: [{
      stacked: true,
      ticks: {
        precision: 0
      }
    }]
  }
}

var ctx = document.getElementById('canvas').getContext('2d');
window.myBar = new Chart(ctx, {
  type: 'bar',
  data: barChartData,
  options: barChartOptions
});

document.getElementById('randomizeData').addEventListener('click', function() {
  barChartData.datasets.forEach(dataset=>{
    var newData = []
    for (var i = 0; i < dataset.data.length; i++) {
      newData.push(Math.floor(Math.random()*3)+1)
    }
    dataset.data = newData
  });
  window.myBar.update();
});

关于javascript - Chart.js - 如何将数组集合插入数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59401776/

相关文章:

javascript - 在生产中自动关闭调试变量

javascript - 如何使用javascript检测代理

laravel - 如何在 Blade 模板中包含 subview ?

javascript - Chart.js 时间刻度显示错误的日期之一

javascript - 在 mouseenter generateLegend Chartjs 2 上突出显示 donut 段

javascript - 如何设置极地面积图中比例尺数字的样式 (chart.js)

javascript - 出现未知语法错误

javascript - 使用 anchor 标记 a 在网格中创建动态按钮

php - 在 Laravel 中按照特定参数对数组进行排序

php - 未知错误: cannot create temp dir for user data dir in Laravel with Symfony Panther