Javascript 如何使用chartjs在单个图表上显示两个数据集
我在一个图形上显示两个数据集时遇到问题。从技术上讲,两个数据点都被绘制成图形,但两个值都被绘制在一条线上。见下图 因此,首先解析值:Javascript 如何使用chartjs在单个图表上显示两个数据集,javascript,chart.js,Javascript,Chart.js,我在一个图形上显示两个数据集时遇到问题。从技术上讲,两个数据点都被绘制成图形,但两个值都被绘制在一条线上。见下图 因此,首先解析值: webSocket.onmessage = function(event){ var data = JSON.parse(event.data); console.log(data.value); console.log(data.value2); var today = new Date(); var
webSocket.onmessage = function(event){
var data = JSON.parse(event.data);
console.log(data.value);
console.log(data.value2);
var today = new Date();
var t = today.getHours()+ ":" + today.getMinutes() + ":" + today.getSeconds();
addData(t, data.value, data.value2)
}
由于控制台记录这两个值,因此此代码可以工作。下一步是将数据添加到图表的末尾,我怀疑这是我的错误所在,因为我不知道如何“调用”不同的数据集:
function addData(label, data, data2){
dataPlot.data.labels.push(label);//x-values
dataPlot.data.datasets.forEach((dataset)=> {
dataset.data.push(data);
dataset.data.push(data2);
});
dataPlot.update();
}
最后,对应图表的代码:
dataPlot = new Chart(document.getElementById("line-chart"),{
type: 'line',
data: {
datasets: [{
data: [],
label: "Thermocouple 1",
borderColor: "#3e95cd",
fill: true
},
{
data: [],
label: "Thermocouple 2",
borderColor: " #FF0000",
fill: true
}]
}
});
我认为这里可能也有一个错误,因为我不知道如何“声明”这两个不同的数据集
我对javascript非常陌生
如上所述,结果是一条线被绘制在图表上,但有两个值。因此,加热其中一个热电偶会产生一个看起来基本上像山脉的图形。首先,这里不需要foreach,否则在声明2时,将在数据集中推送4个数据:
dataPlot.data.datasets.forEach((dataset)=> {
dataset.data.push(data);
dataset.data.push(data2);
});
请尝试以下两个选项之一:
手动操作(不使用foreach):
或者,创建一个数据数组,并在该数组上创建forEach:
dataArray.forEach( (item) => {
dataPlot.data.datasets.push(item);
});
PS:对于第二个选项,您需要确保dataArray.length==dataPlot.data.datasets.length要开始,这里不需要foreach,否则在声明2:
dataPlot.data.datasets.forEach((dataset)=> {
dataset.data.push(data);
dataset.data.push(data2);
});
请尝试以下两个选项之一:
手动操作(不使用foreach):
或者,创建一个数据数组,并在该数组上创建forEach:
dataArray.forEach( (item) => {
dataPlot.data.datasets.push(item);
});
PS:对于第二个选项,您需要确保dataArray.length==dataPlot.data.datasets.length谢谢,我刚才这么做了,效果很好。在我发布的路上,但你抢先告诉我:D.我使用了第一个选项,但没有使用两次数据,第二次推送必须使用data2,如:dataPlot.data.datasets.push(数据);dataPlot.data.datasets.push(data2);你是对的,我忘了在最后加上“2”(复制/过去:p),我更新了我的回答谢谢,我刚才这么做了,它成功了。在我发布的路上,但你抢先告诉我:D.我使用了第一个选项,但没有使用两次数据,第二次推送必须使用data2,如:dataPlot.data.datasets.push(数据);dataPlot.data.datasets.push(data2);你说得对,我忘了在最后加上“2”(copy/pass:p),我更新了我的答案