Chart.js不同的时间数据集

6qqygrtg  于 2023-01-13  发布在  Chart.js
关注(0)|答案(2)|浏览(162)

我想使用Chart.js绘制我自己制作的恒温器的温度读数和加热器状态。加热器状态是0或1,但我将其保存为最小表示形式:我只有值,当它打开/关闭。加热时间从来不等于测量时间,而是在两者之间。
我想在同一个时间x轴上绘制时间数据。从至少20个例子、问题和其他资源中,我收集了this Fiddle,这是我最好的猜测。然而,我不能合理地绘制时间轴和它们的数据。如果我在一个非常简化的例子中将其简化为x轴上的数字数据,我会得到在后一个例子的前几个x值上绘制的较小数据集。
js代码为:

var options = {
  type: 'line',
  data: {
    labels: ["2018-12-07 08:45:17", 
    "2018-12-07 09:30:17", "2018-12-07 10:15:16", 
    "2018-12-07 11:00:17", "2018-12-07 14:45:16"],
    datasets: [
        {
          label: '1st line',
          data: [12, 19, 7, 9, 10, 8],
        },  
            {
          steppedLine: 'before',
          xAxisID: 'x-axis-2',
          label: '2nd line',
          data: [                       
          {
            x: "2018-12-07 09:15:47",
            y: 3
          }, {
            x: "2018-12-07 10:55:25",
            y: 5
          }, {
            x: "2018-12-07 13:05:00",
            y: 3
          }],
        }
     ]
  },
  options: {
    scales: {
      xAxes: [{}, {
        id: 'x-axis-2',
        type: 'linear',
        position: 'bottom',
        //display: false,
      }],
    }
  }
}

var ctx = document.getElementById('chartJSContainer').getContext('2d');
new Chart(ctx, options);
yc0p9oo0

yc0p9oo01#

首先,可以使用唯一的xAxis并将其定义为time cartesian axis

xAxes: [{
  type: 'time',
  time: {
    unit: 'second'
  }
}]

此外,您不应该提供data.labels,而是使用包含x和y属性的对象定义每个数据点。
x一个一个一个一个x一个一个二个x

6mw9ycah

6mw9ycah2#

我终于能够解决javaScript对象的数据结构问题了,它需要[{ "x": 1, "y":1}, {"x":2, "y":3} ]结构,其中x和y是每个条目的对象属性x和y,而不是一劳永逸(这对我来说总是更有意义),但是我可以发送数据而不需要额外的标签,然后用javascript动态地转换它们,如下所示:

datasets: [
{
  label: 'Temperature',
  data: response.temperature.x.map((x, i) => ({ x, y: response.temperature.y[i] })),
},
{
  label: 'Room 2 Temperature',
  data: response.temp2.x.map((x, i) => ({ x, y: response.temp2.y[i] })),
},
] // datasets

相关问题