javascript - highcharts 的历史数据中不存在毫秒数据
问题描述
问题是,当highcharts的historyData中有大量数据时,放大数据时只会出现每秒而不是几毫秒。因此,在放大历史数据中包含大量数据的图表时,毫秒数据丢失。
要重现该问题,请访问以下链接,然后在 historydata 中存在大量数据时,将 setinterval 方法中的间隔从 20 更改为一些大数字 20000,然后使用 rangeselector 放大历史数据,历史数据仅绘制秒数据但不是毫秒数据。
该问题在以下链接中重现: https ://jsfiddle.net/nh5ap21m/
我访问了 highcharts 的 api 文档:https ://api.highcharts.com/highcharts/plotOptions.series.pointInterval并尝试对 pointInterval、pointIntervalUnit、connectNulls、gapSize gapUnit 进行更改,但仍然找不到确切的解决方案。
此处更改间隔:
setInterval(function () {
var x = (new Date()).getTime(), // current time
y = Math.round(Math.random() * 100);
series1.addPoint([x, y], true, true);
}, 20);
var series2 = this.series[1];
setInterval(function () {
var x = (new Date()).getTime(), // current time
y = Math.round(Math.random() * 50);
series2.addPoint([x, y], true, true);
}, 20);
预期结果:预期结果是当放大图表的historyData时,还应该绘制毫秒数据。
// Create the chart
Highcharts.stockChart('container', {
chart: {
events: {
load: function () {
// set up the updating of the chart each second
var series1 = this.series[0];
setInterval(function () {
var x = (new Date()).getTime(), // current time
y = Math.round(Math.random() * 100);
series1.addPoint([x, y], true, true);
}, 20);
var series2 = this.series[1];
setInterval(function () {
var x = (new Date()).getTime(), // current time
y = Math.round(Math.random() * 50);
series2.addPoint([x, y], true, true);
}, 20);
}
}
},
time: {
useUTC: false
},
rangeSelector: {
buttons: [{
count: 1,
type: 'minute',
text: '1M'
}, {
count: 5,
type: 'minute',
text: '5M'
}, {
type: 'all',
text: 'All'
}],
inputEnabled: false,
selected: 0
},
title: {
text: 'Live random data'
},
exporting: {
enabled: false
},
legend: {
enabled: true
},
plotOptions: {
series: {
marker: {
states: {
hover: {
enabled: true,
animation: {duration: 100},
enableMouseTracking: true,
stickyTracking: true
}
}
}
}
},
tooltip:{
shared: true,
split: false,
stickyTracking: true,
enableMouseTracking: true,
enabled: true,
followPointer: true,
followTouchMove: true,
formatter: function(){
var tooltip = "";
var phaseNameList = "";
//tooltip += "<b>I-unit "+ "<br/>"+ "x: "+this.x +"</b>";
tooltip += "<b>I-unit "+ "<br/>"+ "x: "+ new Date(this.x)+
"</b>";
tooltip += "<br/>"+ "y: "+this.y +"</b>";
tooltip += "<br/>"+ this + "</b>";
return tooltip;
}
},
series: [{
name: 'Random data1',
data: (function () {
// generate an array of random data
var data = [],
time = (new Date()).getTime(),
i;
for (i = -999; i <= 0; i += 1) {
data.push([
time + i * 1000,
Math.round(Math.random() * 100)
]);
}
return data;
}())
},
{
name: 'Random data2',
data: (function () {
// generate an array of random data
var data = [],
time = (new Date()).getTime(),
i;
for (i = -999; i <= 0; i += 1) {
data.push([
time + i * 1000,
Math.round(Math.random() * 50)
]);
}
return data;
}())
}]
});
<script src="https://code.highcharts.com/stock/highstock.js"></script>
<script src="https://code.highcharts.com/stock/modules/exporting.js"></script>
<script src="https://code.highcharts.com/stock/modules/export-data.js"></script>
<div id="container" style="height: 400px; min-width: 310px"></div>
解决方案
不同之处在于您的初始数据具有一秒的间隔:
for (i = -999; i <= 0; i += 1) {
data.push([
time + i * 1000, // date every second
Math.round(Math.random() * 100)
]);
}
动态添加的数据有 20 毫秒的间隔:
setInterval(function() {
var x = (new Date()).getTime(), // date every 20 milliseconds
y = Math.round(Math.random() * 50);
series2.addPoint([x, y], true, true);
}, 20);
推荐阅读
- azure-devops - Azure DevOps 发布管道,生产阶段权限防止更改整个管道
- r - Rstudio 中缺少数据
- javascript - 如何从javascript中的对象数组中提取特定属性(即键/值)?
- windows - Docker Toolbox 默认磁盘太小
- javascript - Photoshop Javascript 转到下一层(上面的层)
- sql - (甲骨文)提前 30 天获取
- r - 如何在 R 编程中使用 _sprintf_ 和 _for_
- f# - F# 中的 json.net 反序列化问题
- amazon-web-services - 我可以使用 Athena 在 RDS 数据库中进行查询吗?
- postgresql - PSQL 为字符串添加换行符