Получить список точек данных на холсте после масштабирования 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, который действует как прокси-сервер масштабирования для моего основного 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