Вземете списък с точки от данни в платното след мащабиране jqplot

Наистина съм благодарен, ако някой може да ми помогне по този въпрос. Използваме Jqplot, за да начертаем някои статистически данни и харесваме функцията за мащабиране.

По-конкретно искаме да използваме примерите в

http://www.jqplot.com/deploy/dist/examples/zoom1.html и

http://www.jqplot.com/deploy/dist/examples/zoomOptions.html

Едно от нещата, които трябва да направим, е да преизчислим някои стойности, които показваме на страницата, като стандартно отклонение, средна стойност и т.н. за точките, видими в графиката след увеличаване. За това трябва да получим списъка с точки от данни, които са там ( остават) на графиката, след като увеличихме мащаба. Така че в идеалния случай разглеждаме метод, който връща текущия набор от данни, видим в графиката, след като увеличих мащаба.

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

Благодаря... Амит


person Amitabh    schedule 24.05.2013    source източник
comment
Опитвам се да получа същите данни и по друга причина, но не виждам лесен начин да го направя. Ще актуализирам с отговор, ако намеря нещо   -  person Java Drinker    schedule 24.05.2013
comment
Благодаря @JavaDrinker. На същата лодка :-)   -  person Amitabh    schedule 24.05.2013


Отговори (1)


Добре, така че след много ровене в кода, всъщност няма прост начин да получите тези данни, но има начин.

В решението по-долу имам zoomChart jqPLot obj, който действа като zoom-прокси на основния ми jqPLot, наречен chart. Предполага се, че ако нямате прокси, това трябва да работи също толкова добре, стига да се свържете с правилния обект.

Това, което правя, е да обвържа персонализирана функция към събитието 'jqplotZoom', което се извиква след завършване на действие за мащабиране.

    zoomChart.target.bind('jqplotZoom', function(ev, gridpos, datapos, plot, cursor){
        var plotData =  plot.series[0].data;
        for (var i=0; i< plotData.length; i++) {
            if(plotData[i][0] >= chart.axes.xaxis.min && plotData[i][0] <= chart.axes.xaxis.max ) {
                //this dataset from the original is within the zoomed region
                //You can save these datapoints in a new array
                //This new array will contain your zoom dataset
                //for ex: zoomDataset.push(plotData[i]);
            }
        }
    });

Това има ли смисъл? По същество chart.axes.xaxis съдържа границите на увеличената област, а plot.series[N].data са всички ваши оригинални данни във формата на диаграмата.

Имайте предвид, че използвах chart, защото първоначално създадох var chart = $.jqplot("chartDiv", ...

Трябва да използвате името на променливата, което сте дали на графиката. Надявам се това да помогне!

person Java Drinker    schedule 24.05.2013
comment
Мога да потвърдя, че работи без прокси към. Дори когато диаграмата е генерирана от PrimeFaces - person Kukeltje; 22.09.2015