jqplot неправильно масштабируется с помощью средства визуализации оси даты

Я использую jqPlot (кажется, версия 1.0.2 — выпуск от 25.07.12) для рендеринга дневной выработки солнечной энергии для различных значений. Когда я увеличиваю часть дня, довольно часто отображается неправильная область диаграммы.

Вот варианты сюжета -

    var plotOptions = {
    series: [{ showMarker:false} ],
    axes: {
        xaxis:{
            renderer:jQuery.jqplot.DateAxisRenderer,
            tickOptions:{
                formatString:'%R'
            },
            min: data[0].time * 1000,
            max: data[data.length - 1].time * 1000
        },
        yaxis: {
            tickOptions: {
                formatString: '%.3f'
            }
        }
    },
    highlighter: {
        show : true,
        sizeAdjust: 7.5
    },
    cursor: {
        show : true,
        zoom: true,
        showToolTip: false
    }
};

Данные представляют собой 1-минутные выборки всей электрической системы, при этом текущее значение по умолчанию представляет собой переменный ток на одной фазе (стандартная электрическая система Северной Америки — мощность переменного тока 120/240 вольт). Обычно имеется 1440 выборок, по одной на каждую минуту дня.

Что я вижу, так это то, что я выбираю регион, обычно 4 или 6 часов, и масштабируется неправильная часть данных. Например, если я выберу от полуночи до 8 утра, вместо этого я увижу от 4 до 8 утра (или, возможно, 9 утра, если я увеличу масштаб чуть дальше 8 утра). Это довольно последовательно — отображается вторая половина диапазона — но я также вижу случаи, когда нет рифмы или причины в том, что отображается, и значения могут быть увеличены настолько близко, что я не могу сказать, что к чему.

Я пытался украсть много из примеров, но безрезультатно. Я также пытался ограничить размер моего набора данных, и это, похоже, не очень помогает.

ОБНОВЛЕНИЕ: я пытался переключиться с использования необработанных временных меток на использование объектов Date(), но безрезультатно...


person Julie in Austin    schedule 05.08.2012    source источник
comment
Поскольку у меня начались проблемы с масштабированием с помощью jqplot, я переключился на flot. Даже жесткий jqplot визуально богаче, флот оказался надежнее.   -  person Thomas C. G. de Vilhena    schedule 05.08.2012
comment
Томас -- похоже, это то, что мне придется сделать. Кроме пока нет ответов! проблема, я предполагаю, что флот был бы лучшим выбором. Если я с отвращением сдамся, обещаю, что приму Dump jqPlot! как ответ от вас ;)   -  person Julie in Austin    schedule 06.08.2012
comment
@Thomas - я просматривал stackoverflow, чтобы увидеть, сколько других проблем с jqPlot существует, и есть удивительно большое количество вопросов без ответов. Так что... похоже переход на флот - правильный ответ...   -  person Julie in Austin    schedule 09.08.2012
comment
Поскольку никто не дал ответа, мне лучше превратить свой комментарий в один;)   -  person Thomas C. G. de Vilhena    schedule 10.08.2012


Ответы (2)


Я столкнулся с этой же проблемой. Я не мог переключиться на Flot, хотя это тоже хороший пакет. Я немного покопался и нашел этот пост на jqplot-users группа google, у которой был ответ.

Вот краткий ответ. В src\plugins\jqplot.dateAxisRenderer.js есть ошибка. В сообщении говорится, что обходной путь заключается в том, чтобы закомментировать следующее в файле dataAxisRenderer.js.

min = new $.jsDate(min);
min = min.getTime() + min.getUtcOffset();

ОДНАКО, я не уверен,

min = new $.jsDate(min);
min = min.getTime();

необходимо или нет, удаление этого может быть плохой идеей. Я ничего не заметил, но я думаю, что мы могли бы оставить эти строки и просто удалить min.getUtcOffset().

person joe.dawley    schedule 03.10.2012
comment
Вот оно! Я использую свернутый JS-файл, поэтому мне пришлось искать getUtcOffset() в jqplot.dateAxisRenderer.js, разбивать строку, а затем закомментировать ошибочный код, чтобы протестировать исправление. - person Julie in Austin; 21.04.2013

Не пытаясь недооценить jqPlot, отличный плагин для создания визуально привлекательных графиков и диаграмм, я предлагаю Вы также можете воспользоваться Flot для построения графиков с функцией масштабирования. Я попробовал оба и обнаружил, что Flot более надежен для такого рода требований.

Несколько советов по настройке оси DateTime при использовании Flot (из Flot Ссылка):

Поддержка временных рядов во Flot основана на временных метках Javascript, и вы можете увидеть такую ​​временную метку:

alert((new Date()).getTime())

В .NET вы можете получить соответствующую метку времени с помощью:

public static int GetJavascriptTimestamp(System.DateTime input)
{
    System.TimeSpan span = new System.TimeSpan(System.DateTime.Parse("1/1/1970").Ticks);
    System.DateTime time = input.Subtract(span);
    return (long)(time.Ticks / 10000);
}

И некоторые форматы времени обсуждаются в этом вопросе SO.

person Thomas C. G. de Vilhena    schedule 10.08.2012