javascript - 在 ChartJS 中创建动态饼图的问题
问题描述
我正在使用 ChartJS 库创建一个动态饼图。我正在使用 Laravel 6,在我的控制器中,我有一个以 JSON 格式传递数组的函数。这是数组的结构:
[
{"label":"assistingSales","values":21},
{"label":"hseMeeting","values":12},
{"label":"training","values":30}
]
在我的 .js 文件中,我使用 JQuery 和 .GET 方法检索这些数据,然后使用 forEach 循环创建两个数组:Values和Labels。我将这些数组发送到 Web 控制台 (console.log),它们看起来都是正确的。值是整数,标签是字符串。当我将这些数组设置为.js 文件中饼图的数据集和标签时,问题就开始了。如果我在数据集中手动写入值,Pie 显示正常,但它无法识别数组本身。
这是 .js 文件的代码
var valores = new Array();
var etiquetas = new Array();
$(document).ready(function(){
$.get("http://127.0.0.1:8000/percentajes", function(response){
response.forEach(function(item){
valores.push(item.values);
etiquetas.push(item.labels);
});
console.log(valores);
console.log(etiquetas);
var config = {
type: 'pie',
data: {
datasets: [{
data: [ valores ],
label: 'Dataset 1'
}],
labels: [ etiquetas ]},
options: {
responsive: true,
legend: {
position: 'top',
},
animation: {
animateScale: true,
animateRotate: true
}
}
};
var ctx = document.getElementById('myPieChart').getContext('2d');
var mychart = new Chart(ctx, config);
});
});
问题是当我将数组设置为datasets和labels时,图表没有出现。只有当我以这种方式设置它们时才会出现:
valores[0],valores[1],valores[2]
etiquetas[0],etiquetas[1],etiquetas[2]
我认为它可能与数据类型有关,但它们没关系,整数和字符串。我还尝试使用 for 循环来创建两个单独的数组,但什么也没发生。
你能检查我的代码并告诉我是否有其他或更好的方法吗?提前致谢!
解决方案
问题是您将数组valores
和etiquetas
数组包装array
在config
.
data: [ valores ]
labels: [ etiquetas ]
只需摆脱这些方括号,它就会起作用。
data: valores
labels: etiquetas
请查看以下可运行的代码片段。
const response = [
{"label":"assistingSales", "values":21},
{"label":"hseMeeting", "values":12},
{"label":"training", "values":30}
]
var valores = new Array();
var etiquetas = new Array();
response.forEach(function(item){
valores.push(item.values);
etiquetas.push(item.label);
});
var config = {
type: 'pie',
data: {
datasets: [{
data: valores,
backgroundColor: ['#FF6384', '#36A2EB','#FFCE56']
}],
labels: etiquetas
},
options: {
responsive: true,
legend: {
position: 'top',
},
animation: {
animateScale: true,
animateRotate: true
}
}
};
new Chart(document.getElementById('myPieChart'), config);
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<canvas id="myPieChart"></canvas>
推荐阅读
- hadoop - 在您的类路径中找不到持久性单元“oozie-mariadb”的指定 XML 资源“persistence.xml”
- python - 我不应该使用内置的元组特定函数吗?
- python - 如何在csv文件中传递structtype
- javascript - 如何使用react js在点击的基础上动态获取api数据
- javascript - 通过 JS API 在 OpenSea 上列出 NFT:Failed to extract transfer calldata 错误 400
- mysql - 在 MYSQL 中选择大小写
- javascript - 按字段名称减少或映射对象
- reactjs - 尝试通过 axios 访问数据,但对预检请求的响应未通过访问控制检查
- arcgis - 画布高度不断增加 Arcgis/core
- elasticsearch - 尝试创建弹性搜索快照时抛出存储库丢失异常。?