作者:djw | 来源:互联网 | 2023-01-02 13:39
我有两个时间序列例如:
s1:
2017-01-06 18:39:30 100
2017-01-07 18:39:28 101
和
s2:
2017-01-07 18:00:00 90
2017-01-08 18:00:00 105
我想在Chartjs图表中绘制这些图,但似乎Chartjs只采用一个x轴数组(或Chartjs术语中的标签).
所以我的问题是绘制这两者的最佳方法是什么?
我的方法是编写一个函数(在python中,尽管这个部分的语言并不重要),它遍历两个时间序列并创建3个新数组,其格式显然是Chartjs需要基于第一个例子:https ://www.sitepoint.com/introduction-chart-js-2-0-six-examples/
算法(在sudo代码中)如下:
# inputs are initial time series s1 and s2
y1 = [] # to hold new s1 data values
y2 = [] # to hold new s2 data values
x = [] # to hold times
# iterate through longest series s1 or s2
if s1[idx].time > s2[idx].time
x.append(s1[idx].time)
y1.append(s1[idx].data)
# y2 appends the linear interpolation of
# of closest y2 points
if (s1[idx].time y2, s1->s2
else # they have the same time
x.append(s1[idx].time)
y1.append(s1[idx].data)
y2.append(s2[idx].data)
当数据耗尽较短的系列时,还有一些其他条件检查,但这是主要逻辑.之后我有3个数组,我现在可以通过一个时间/标签数组/ x轴和两个数据数组添加到图表js.然而,考虑到我认为这个用例的常见程度,这似乎更复杂.非常感谢任何帮助或建议.
1> Waterscroll..:
在ChartJS中,label是类别Cartesian Axis.由于您在代码中提到了线性插值,我假设字符串2017-01-06 18:39:30
不是类别,它们代表x轴的数值.所以我们需要通知ChartJS x轴上的字符串实际上是时间.我们在比例选项中执行此操作.
var s1 = {
label: 's1',
borderColor: 'blue',
data: [
{ x: '2017-01-06 18:39:30', y: 100 },
{ x: '2017-01-07 18:39:28', y: 101 },
]
};
var s2 = {
label: 's2',
borderColor: 'red',
data: [
{ x: '2017-01-07 18:00:00', y: 90 },
{ x: '2017-01-08 18:00:00', y: 105 },
]
};
var ctx = document.getElementById('myChart').getContext('2d');
var chart = new Chart(ctx, {
type: 'line',
data: { datasets: [s1, s2] },
options: {
scales: {
xAxes: [{
type: 'time'
}]
}
}
});