我正在尝试使用 Highstock/Highchart 来显示一些数据。在我的数据中,每条记录之间的间隔为 1 毫秒,我想将每个滴答之间的长度设置为 40 毫秒,我通过将滴答间隔设置为 40 进行了尝试,但在图表上显示每个滴答之间的长度为 50。如果我将它设置为30,则图表显示为25。很奇怪,我现在不知道该怎么办,请帮忙。
链接:http: //jsfiddle.net/xEcNS/1/
谢谢
我正在尝试使用 Highstock/Highchart 来显示一些数据。在我的数据中,每条记录之间的间隔为 1 毫秒,我想将每个滴答之间的长度设置为 40 毫秒,我通过将滴答间隔设置为 40 进行了尝试,但在图表上显示每个滴答之间的长度为 50。如果我将它设置为30,则图表显示为25。很奇怪,我现在不知道该怎么办,请帮忙。
链接:http: //jsfiddle.net/xEcNS/1/
谢谢
我浏览了highstock源代码,找到了这段代码
function normalizeTimeTickInterval(tickInterval, unitsOption) {
var units = unitsOption || [[
MILLISECOND, // unit name
[1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples
...
}
这段代码是什么?它说如果您的时间单位是毫秒,则将tickInterval(在您的情况下为40)标准化为其中之一的倍数,因此它将40标准化为50和30标准化为25。我不知道这是否可以被选项覆盖。但是,如果您可以接受并且不违反任何版权法,您确实可以选择更改代码。
编辑:找到一个 hack 可以在不更改源代码检查小提琴@ http://jsfiddle.net/jugal/H83bs/的情况下使其正常工作
这就是我所做的。对源代码的一点调试/分析提示 highchart 首先尝试在轴的选项的单位属性中找到单位的东西,如果找不到,它会使用默认的。所以我继续调整units属性来设置它如下。您需要在调用 highcharts 构造函数之前执行此操作。
Highcharts.Axis.prototype.defaultOptions.units=[[
'millisecond',
[1, 2, 5, 10, 20, 25,30,40, 50, 100, 200, 500]
], [
'second',
[1, 2, 5, 10, 15, 30]
], [
'minute',
[1, 2, 5, 10, 15, 30]
], [
'hour',
[1, 2, 3, 4, 6, 8, 12]
], [
'day',
[1]
], [
'week',
[1]
], [
'month',
[1, 3, 6]
], [
'year',
null
]];
Highstock 不会将您提供的确切值设置为tickInterval
。
默认情况下,它的作用是遍历单元以找到最适合tickInterval
.
[1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // 毫秒允许的倍数
[1, 2, 5, 10, 15, 30] // 秒
[1, 2, 5, 10, 15, 30] // 分钟
[1, 2, 3, 4, 6, 8, 12] // 小时
[1, 2] // 天
[1, 2] // 周
[1, 2, 3, 4, 6] //月份
因此,将通过搜索最近的最佳匹配来设置输入。