Highcharts.stockChart 不规则时间戳的 x 轴数据散点日期范围处理
Highcharts.stockChart x-axis data for irregular time-stamped scatter breaks date range-handling
改编自 https://github.com/tevye/HighchartsXAxisSpecificationProblem 中的 README.md 文件:
三个示例 Highstocks HTML 文件,一个有效,一个因使数据时间戳不规则而损坏,最后一个显示修复尝试失败,在 github 存储库中。
背景
工作版本是 Emerson 为求助 javascript 控制台错误 15 (Sorting Scatter Highstock Chart with Multiple Series) 而输入的示例的略微修改版本。忽略控制台错误,我们希望 Highstocks 导航器位于具有不规则数据时间戳的散点图上。存储库中包含的工作版本有一个大型二维数组 'points',具有固定的时间间隔。 xaxis 声明具有来自 'points'.
的 'data' 定义映射值
data: points.map(function(point) {
return [point[2]];
}),
损坏版本中的唯一变化是从 'points' 数组中进行了一组任意删除,以强制时间戳足够不规则,从而破坏 Highcharts 提供的日期推断。 (如果你从工作副本的 'points' 二维数组中删除几行,它仍然有效。删除一些它仍然有效......这很酷)。
在存储库的屏幕截图中 'broken_badTickArray.html.png',您可以看到日期是 1969 年 12 月 31 日到 1970 年 1 月 1 日,报价数组数据无法辨认。
尝试修复(上传的版本仅 'representative' 几次尝试)
从损坏的版本开始,进行了多次尝试来克服错误的日期范围问题。屏幕截图 'works_goodTickArray.html.png' 显示 Highcharts 将大量时间戳归结为一小部分午夜边界。在尝试修复的版本中,以下代码生成一组明确的时间戳,然后将其作为 x 轴数据的值给出。
var xtd = [];
var apr222017 = 1492819200000;
var may162017 = 1494892800000;
var x = 0;
do {
xtd[x] = apr222017 + (x * 86400000);
x++
} while ((apr222017 + (x * 86400000)) < may162017);
当这不起作用时,尝试设置 'floor' 和 'ceiling'...
// ...
data: xtd,
floor: apr222017,
ceiling: may162017,
// ...
没有运气添加...
min: apr222017,
max: may162017,
这没有帮助。也没有删除 floor 和 ceiling 定义并且只使用 min/max.
添加以下内容也失败了:
tickPositioner: function() {
return xtd;
},
数据点数小于1001时失败
这里似乎发生的是 "turbo" 模式默认在 1000 个条目时启动,并且似乎在该模式下一次正确解释数据。
为 "axis 0"
将 turboThreshold 设置为 1
{
xAxis: 0,
turboThreshold: 1,
//min:0,
//max: 100,
data: points.map(function(point) {
return [point[0]];//, point[1]];
}),
showInNavigator: true,
enableMouseTracking: false,
color: '#FF0000',
showInLegend: false
}
],
Whosebug Question
Referenced within the issues space for highcharts / albeit not an issue
改编自 https://github.com/tevye/HighchartsXAxisSpecificationProblem 中的 README.md 文件:
三个示例 Highstocks HTML 文件,一个有效,一个因使数据时间戳不规则而损坏,最后一个显示修复尝试失败,在 github 存储库中。
背景
工作版本是 Emerson 为求助 javascript 控制台错误 15 (Sorting Scatter Highstock Chart with Multiple Series) 而输入的示例的略微修改版本。忽略控制台错误,我们希望 Highstocks 导航器位于具有不规则数据时间戳的散点图上。存储库中包含的工作版本有一个大型二维数组 'points',具有固定的时间间隔。 xaxis 声明具有来自 'points'.
的 'data' 定义映射值data: points.map(function(point) {
return [point[2]];
}),
损坏版本中的唯一变化是从 'points' 数组中进行了一组任意删除,以强制时间戳足够不规则,从而破坏 Highcharts 提供的日期推断。 (如果你从工作副本的 'points' 二维数组中删除几行,它仍然有效。删除一些它仍然有效......这很酷)。
在存储库的屏幕截图中 'broken_badTickArray.html.png',您可以看到日期是 1969 年 12 月 31 日到 1970 年 1 月 1 日,报价数组数据无法辨认。
尝试修复(上传的版本仅 'representative' 几次尝试) 从损坏的版本开始,进行了多次尝试来克服错误的日期范围问题。屏幕截图 'works_goodTickArray.html.png' 显示 Highcharts 将大量时间戳归结为一小部分午夜边界。在尝试修复的版本中,以下代码生成一组明确的时间戳,然后将其作为 x 轴数据的值给出。
var xtd = [];
var apr222017 = 1492819200000;
var may162017 = 1494892800000;
var x = 0;
do {
xtd[x] = apr222017 + (x * 86400000);
x++
} while ((apr222017 + (x * 86400000)) < may162017);
当这不起作用时,尝试设置 'floor' 和 'ceiling'...
// ...
data: xtd,
floor: apr222017,
ceiling: may162017,
// ...
没有运气添加...
min: apr222017,
max: may162017,
这没有帮助。也没有删除 floor 和 ceiling 定义并且只使用 min/max.
添加以下内容也失败了:
tickPositioner: function() {
return xtd;
},
数据点数小于1001时失败
这里似乎发生的是 "turbo" 模式默认在 1000 个条目时启动,并且似乎在该模式下一次正确解释数据。
为 "axis 0"
将 turboThreshold 设置为 1{
xAxis: 0,
turboThreshold: 1,
//min:0,
//max: 100,
data: points.map(function(point) {
return [point[0]];//, point[1]];
}),
showInNavigator: true,
enableMouseTracking: false,
color: '#FF0000',
showInLegend: false
}
],
Whosebug Question
Referenced within the issues space for highcharts / albeit not an issue