1

我正在尝试使用 Highstock/Highchart 来显示一些数据。在我的数据中,每条记录之间的间隔为 1 毫秒,我想将每个滴答之间的长度设置为 40 毫秒,我通过将滴答间隔设置为 40 进行了尝试,但在图表上显示每个滴答之间的长度为 50。如果我将它设置为30,则图表显示为25。很奇怪,我现在不知道该怎么办,请帮忙。

链接:http: //jsfiddle.net/xEcNS/1/

谢谢

4

2 回答 2

2

我浏览了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
        ]];
于 2012-08-06T11:16:22.460 回答
0

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] //月份

因此,将通过搜索最近的最佳匹配来设置输入。

于 2012-08-06T10:56:37.813 回答