Chart.js - 如何将数组集合推送到数据集中

2023-11-01前端开发问题
10

本文介绍了Chart.js - 如何将数组集合推送到数据集中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

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

这是一个例子

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

我正在使用 laravel,上面的表格是使用 foreach 循环实现的.

解决方案

你真的应该提供更多信息.你尝试了什么,失败了什么……不要指望人们做你的工作,浪费他们的时间让你可以小睡一个小时.StackOverflow 是针对特定问题的,而不是让别人做别人的工作.获取 chart.js 的数据很简单,您可以在任何其他关于 chart.js 的帖子中找到.

足够的咆哮,只是让您知道您不应该期望将来会得到此类问题的答案.

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

完整代码(同 JSBin):

var initialData = [{'条形码贴纸问题':1,'额外':1,'标签问题':2,'库存准确性':1,质量错误":1},{'条形码贴纸问题':1,'额外':1,'标签问题':2,'库存准确性':1,质量错误":3},{'条形码贴纸问题':2,'额外':2,'标签问题':1,'库存准确性':2,质量错误":3}]常量颜色 = ['红色的','蓝色','绿色']var barChartData = {标签:Object.keys(initialData[0]),数据集:[]};for (var i = 0; i < initialData.length; i++) {barChartData.datasets.push({标签:'数据集' + (i+1),背景颜色:颜色[i % colors.length],数据:Object.values(initialData[i])})}var barChartOptions = {标题: {显示:假,text: 'Chart.js 堆积条形图'},工具提示:{模式:'索引',相交:假},响应式:真实,秤:{x轴:[{堆叠:真实,}],y轴:[{堆叠:真实,滴答声:{精度:0}}]}}var ctx = document.getElementById('canvas').getContext('2d');window.myBar = new Chart(ctx, {类型:'酒吧',数据:条形图数据,选项:barChartOptions});document.getElementById('randomizeData').addEventListener('click', function() {barChartData.datasets.forEach(dataset=>{变量新数据 = []for (var i = 0; i < dataset.data.length; i++) {newData.push(Math.floor(Math.random()*3)+1)}dataset.data = newData});window.myBar.update();});

I have been trying many ways to push the collection of array into the dataset. Anyone can help me to push an array into stacked chart based on the codepen below?

Here's the example

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();
        });

Here's the data for arrays

The issues should be the dataset with different colors and total should be the value for Y axis and there should be another collection of array date for X axis and the colors for the dataset should be different. The data for issues and total will be retrieved from Mysql database.

I am using laravel and the table above was achieved using foreach loop.

解决方案

You really should provide more information. What have you tried, what failed... Don't expect people do your job, wasting their time so you can nap for an hour. StackOverflow is for specific questions and not for letting others do somebody else's work. And getting data for chart.js is something trivial you can find in any other post about chart.js.

Enough ranting, just letting you know you shouldn't expect answers in the future for questions like that.

  1. The code you posted in your question is quite different to the one from the codepen link, but this can be due to Narendra Jadhav's 'update'. But if confused me enough so I don't know what you want.
  2. You didn't stated if you want to update our data so I didn't implemented updating.
  3. Don't know the use case of this random randomizeData() does, especially with the fixed length of 7. I changed it but as I don't know the reason it may be different to your use case.
  4. I don't know the data format you get from MySQL so I used a possible format. Same as above, could be different to what you want.
  5. Please use an newer version of chart.js and not a year old version. There are no breaking changes, only improvements. Just updating the version eliminated a few bugs, e.g. the strange space between the yAxis and the chart.

Complete code (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();
});

这篇关于Chart.js - 如何将数组集合推送到数据集中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

Fatal error: Call to a member function fetch_assoc() on a no
业务场景:使用update语句去更新数据库字段。 原因:update接收值不正确。原来代码: $query = "UPDATE student SET date = now() WHERE id = $id";$result = $mysqli-query($query2) or die($mysqli-error); // 问题出现了在这句 $data = $result-fetch_ass...
2024-12-13 前端开发问题
136

js删除数组中指定元素的5种方法
在JavaScript中,我们有多种方法可以删除数组中的指定元素。以下给出了5种常见的方法并提供了相应的代码示例: 1.使用splice()方法: let array = [0, 1, 2, 3, 4, 5];let index = array.indexOf(2);if (index -1) { array.splice(index, 1);}// array = [0,...
2024-11-22 前端开发问题
182

layui树状组件tree怎么默认勾选?
在layui树状组件tree中,勾选问题可以通过以下方法解决: 通过tree的oncheck事件来监听勾选操作,然后根据勾选状态进行相应的处理。例如: tree.on('check', function(obj) { // 获取勾选状态 var isChecked = obj.checked; // 获取当前节点数据 var data =...
2024-11-09 前端开发问题
372

layui要如何改变时间日历布局大小?
问题描述 我想改变layui时间日历布局大小,这个要怎么操作呢? 解决办法 可以用css样式对时间日历进行重新布局,具体代码如下: !DOCTYPE htmlhtmlheadmeta charset="UTF-8"title/titlelink rel="stylesheet" href="../../layui/css/layui.css" /style#test-...
2024-10-24 前端开发问题
271

JavaScript小数运算出现多位的解决办法
在开发JS过程中,会经常遇到两个小数相运算的情况,但是运算结果却与预期不同,调试一下发现计算结果竟然有那么长一串尾巴。如下图所示: 产生原因: JavaScript对小数运算会先转成二进制,运算完毕再转回十进制,过程中会有丢失,不过不是所有的小数间运算会...
2024-10-18 前端开发问题
301

JavaScript(js)文件字符串中丢失"\"斜线的解决方法
问题描述: 在javascript中引用js代码,然后导致反斜杠丢失,发现字符串中的所有\信息丢失。比如在js中引用input type=text onkeyup=value=value.replace(/[^\d]/g,) ,结果导致正则表达式中的\丢失。 问题原因: 该字符串含有\,javascript对字符串进行了转...
2024-10-17 前端开发问题
437