Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用chartjs在单个图表上显示两个数据集_Javascript_Chart.js - Fatal编程技术网

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),我更新了我的答案