php - 如何在折线图js中显示多个数据集
问题描述
我正在使用折线图.js
我想显示我的折线图有两条线(实际上是动态数据集),底部的位置和标签将以月份为基础。现在我的图表只显示最后一个数据集。
我的数据看起来像这样
{
location: "Apartment A",
color: "#b168ac",
set_data: [{
month: 1,
value: 3500
},{
month: 2,
value: 2700
},{
month: 3,
value: 1500
}]
},
{
location: "Apartment B",
color: "#b168aa",
set_data: [{
month: 1,
value: 1700
},{
month: 2,
value: 2800
},{
month: 3,
value: 3200
}]
}
我让我的代码是这样的:
var obj = JSON.parse(data);
$.each(obj,function(i,item){
var locate = [];
var amt = [];
var color = [];
var item_set = [];
locate.push(item.location);
var m = [];
var val = [];
var item_s = item.set_data;
$.each(item_s,function(i2,item2){
val.push(item2.value);
m.push(item2.month);
var chartdata = {
labels: m,
datasets : [{
label:locate,
data: val,
backgroundColor: item.color,
borderWidth: 1,
fill: false,
}]
};
var ctx = document.getElementById("graph_by_usage").getContext('2d');
var LineChart = new Chart(ctx,{
type : 'line',
data : chartdata,
options: {
responsive:true
}
});
});
});
数据应该是这样的https://codepen.io/k3no/pen/pbYGVa 请给我建议。谢谢你。
解决方案
假设您的数据是 JSON 数组,您可以按如下方式生成标签和数据集:
const labels = baseData[0].set_data.map(v => v.month);
const dataSets = [];
baseData.forEach(o => dataSets.push({
label: o.location,
data: o.set_data.map(v => v.value),
borderColor: o.color,
borderWidth: 1,
fill: false
})
);
请查看下面的可运行代码示例。
const baseData = [{
location: "Apartment A",
color: "red",
set_data: [
{ month: 1, value: 3500 },
{ month: 2, value: 2700 },
{ month: 3, value: 1500 }
]
},
{
location: "Apartment B",
color: "blue",
set_data: [
{ month: 1, value: 1700 },
{ month: 2, value: 2800 },
{ month: 3, value: 3200 }
]
}
];
const labels = baseData[0].set_data.map(v => v.month);
const dataSets = [];
baseData.forEach(o => dataSets.push({
label: o.location,
data: o.set_data.map(v => v.value),
borderColor: o.color,
borderWidth: 1,
fill: false
})
);
new Chart('graph_by_usage', {
type : 'line',
data: {
labels: labels,
datasets: dataSets
},
options: {
responsive:true
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<canvas id="graph_by_usage" height="90"></canvas>
推荐阅读
- flutter - 如何将获取的数据从服务传递到不同的屏幕
- c - 当我想引用结构变量时,指针类型不兼容
- javascript - 如何激活隐藏输入的功能?
- python - 拖放后如何获取 PyQt5 QListView 索引以匹配模型的列表索引?
- excel - 删除 Windows Excel 中的所有空格
- vba - 访问 VBA - 使用变量名中的计数器循环
- extjs - 如何在 Ext JS 的日历组件中添加监听器?
- firebase - Firebase - Cloud Firestore(集合)
- css - 使用显示时使用 css 网格交替行颜色:行包装器的内容
- vba - 访问 vba 超链接