tickInterval не работает должным образом в Highchart и Highstock.

Я пытаюсь использовать Highstock/Highchart для отображения некоторых данных. В моих данных интервал между каждой записью составляет 1 миллисекунду, я хочу установить длину между каждым тиком до 40 миллисекунд, я пробовал, установив tickInterval на 40, но на графике между каждым тиком отображается 50. Если поставить 30, то на графике будет 25. Очень странно, не знаю, что теперь делать, помогите.

Ссылка: http://jsfiddle.net/xEcNS/1/

Спасибо вам


person leon    schedule 06.08.2012    source источник
comment
Найден хак для вашей проблемы, найдите его в обновленном ответе   -  person Jugal Thakkar    schedule 06.08.2012


Ответы (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. Я не вижу, может ли это быть переопределяется из вариантов. Однако у вас есть возможность изменить код, если это приемлемо для вас и не нарушает никаких законов об авторском праве.

EDIT: найден хак, чтобы заставить это работать без изменения скрипта проверки исходного кода @ http://jsfiddle.net/jugal/H83bs/

Вот что я сделал. Небольшая отладка/анализ исходного кода дала подсказку, что highchart сначала пытается найти единицу измерения в свойстве единиц параметров оси, если не находит, использует единицу по умолчанию. Итак, я пошел дальше и настроил свойство unit, чтобы установить его следующим образом. Вам нужно будет сделать это перед вызовом конструктора 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
        ]];
person Jugal Thakkar    schedule 06.08.2012

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] //Месяц

Таким образом, вход будет установлен путем поиска ближайшего наилучшего совпадения.

person Hardik Mishra    schedule 06.08.2012