Повторно использовать объект jqplot для загрузки или репликации данных

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

Но как только диаграмма создается и загружается данными в первый раз; я не знаю, как загрузить данные при возникновении другого события, что означает, что я хочу повторно использовать объект диаграммы и хочу загружать/реплицировать данные, когда события срабатывают, например...

chartObj.data = [graphData]

Ответы

Ответ 1

Это похоже на работу с реплицированными данными.

chartObj.series[0].data = [[0, 4], [1, 7], [2, 3]];
chartObj.replot();

Кроме того, вы можете проверить это: https://groups.google.com/group/jqplot-users/browse_thread/thread/59df82899617242b/77fe0972f88aef6d%3Fq%3D%2522Groups.%2BCom%2522%2377fe0972f88aef6d&ei=iGwTS6eaOpW8Qpmqic0O&sa=t&ct=res&cd=71&source=groups&usg=AFQjCNHotAa6Z5CIi_-BGTHr_k766ZXXLQ?hl=en, надеюсь, что это поможет.

Ответ 2

Хотя это старый вопрос.

Поскольку принятый ответ не работал у меня, и я не мог найти решение в документах jqPlot. Я пришел к этому решению

var series = [[1,2],[2,3]];
chartObj.replot({data:series});

Src: взглянем на функцию replot.

function (am) {
    var an = am || {};
    var ap = an.data || null;
    var al = (an.clear === false) ? false : true;
    var ao = an.resetAxes || false;
    delete an.data;
    delete an.clear;
    delete an.resetAxes;
    this.target.trigger("jqplotPreReplot");
    if (al) {
        this.destroy()
    }
    if (ap || !L.isEmptyObject(an)) {
        this.reInitialize(ap, an)
    } else {
        this.quickInit()
    } if (ao) {
        this.resetAxesScale(ao, an.axes)
    }
    this.draw();
    this.target.trigger("jqplotPostReplot")
}

Линия if (ap || !L.isEmptyObject(an)) { this.reInitialize(ap, an) }
показывает нам, что для того, чтобы ap передал его в качестве первого параметра внутренней функции повторного инициализации, требуется истинное значение. который определяется как var ap = an.data || null;

Его так просто, как это, но, к сожалению, не документировано нигде, я мог бы найти его


Обратите внимание, что если вы хотите перерисовать некоторые вещи, определенные в ваших параметрах jqPlot, например метки легенд, вы можете просто передать любую функцию функции replot. Просто помните, что фактическая серия для replot должна быть названа "данными"

var options = {
     series : [{
            label: 'Replotted Series',
            linePattern: 'dashed'
     }],
   //^^^ The options for the plot
     data : [[1,2],[2,3]]
   //^^^ The actual series which should get reploted
}
chartObj.replot (options)

Ответ 3

jqplot позволяет быстро обновлять динамические данные.

Согласно документации (раздел данных), "Данные не должны указываться в объекте options..." (fiddle)

plot1.replot({data: [storedData]}); // data should not be passed this way

"... но передается как второй аргумент функции $.jqplot().

if (plot1) plot1.destroy();
plot1 = $.jqplot('chart1', [storedData]); // similar speed to replot

fiddle показывает, что это можно сделать с аналогичной производительностью.

Ответ 4

Пустой граф div, перед тем как отобразить график

$('#graphDiv').empty();
plot = $.jqplot('graphDiv', [graphValues], graphOptions);

Ответ 5

API имеет метод replot/redraw

Перерисовать. Это позволяет изменять данные и свойства сюжета, а затем комлетически очистить график и перерисовать.