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 е визуално по-богат, flot се оказа по-надежден.   -  person Thomas C. G. de Vilhena    schedule 05.08.2012
comment
Томас - това изглежда, че ще трябва да направя. Освен че все още няма отговори! проблем, предполагам, че flot би бил по-добрият избор. Ако се откажа с отвращение, обещавам, че ще приема Dump jqPlot! като отговор от твоя страна ;)   -  person Julie in Austin    schedule 06.08.2012
comment
@Thomas -- Разгледах stackoverflow, за да видя колко други проблеми с jqPlot има и има изненадващо голям брой въпроси без отговори. Така че ... изглежда, че преминаването към flot е правилният отговор ...   -  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