我有存储过程,它返回已存储在数据库中的传感器数据。要显示值,我使用Highcharts库构建图形。
execute [sensors].[dbo].[usp_deddt] 50320001, 1, '20150801', '20150821';
有时候,有一段时间,数据不会出现 - 我得到了差距,例如:
然后我的直方图采用以下形式:
我希望在X轴上看到连续时间序列。
例如,在我的情况下应该是:
16.08.2015 15:00 16.08.2015 16:00 16.08.2015 17:00 16.08.2015 18:00
如何为不规则数据设置定期间隔?
我将非常感谢这些信息。谢谢大家。
答案 0 :(得分:2)
如果我从您的示例中正确理解,您似乎正在使用x轴的类别。
您可以通过简单地删除类别并使用datetime
x轴来解决此问题,而无需制作虚假数据库数据的复杂性。
您的时间戳值将用于绘制沿x轴的值,这意味着默认情况下,它们不会向数据库添加复杂性,或者不必要的循环,可以实现连续的x轴,并将数据绘制在其中确实发生了。
答案 1 :(得分:1)
我知道你不能做那么多事情。 Highcharts显示系列,所以如果你的系列有间隙,它将不会自动填充。
您可以做的是手动生成缺失的部分。例如。您可以在数据库级别生成它:
/* create a table with all possible hours */
create table hours (hour varchar2);
insert into hours values ('01:00');
insert into hours values ('02:00');
insert into hours values ('03:00');
insert into hours values ('04:00');
/* ... */
/* the same for days */
/* ... */
然后只需将您的表格与复合日期值进行外部连接,您就可以获得所有填充空白的系列。
此外,一些数据库允许您生成数据集,而不是创建这些表,有人会称之为垃圾,可能是正确的,例如,在Oracle you can use connect by level statements中实现这一目标而没有表格。
另一种方法是在JavaScript端生成它们。您将数组作为输入并通过传递缺失值来处理它。
答案 2 :(得分:0)
非常感谢所有人的帮助......我的小解决方案:
$scope.highchartsNG = {
options: {
chart: {
zoomType: 'x, y'
},
plotOptions: {
column: { stacking: 'normal', color: '#007a94'},
bar: { dataLabels: { enabled: true } }
},
},
title: {
text: ''
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: {
month: '%e. %b',
year: '%b'
},
},
series: [{
type : 'column',
showInLegend: false,
gapSize: 1,
data: []
}]
}
在我的AngularJS控制器中,我编写了方法(相关部分):
...
var measurementData = [];
$scope.setGraphValues = function () {
...
var data = $scope.tableData;
for(var i = 0; i < data.length; i++) {
measurementData.push([Date.UTC(yearPart, monthPart,
dayPart, hourPart, minutePart),data[i].measureData]);
}
...
$scope.highchartsNG.series[0].data = measurementData;
}
现在一切都好。